Commit 060c5687 authored by Shinya Maeda's avatar Shinya Maeda

Squashed commit of the following:

commit 5aa6032526c7270b8793f62b9a5e66c0ce79c3b9
Merge: cfb05ed27a3 1cf4aa02
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 22:07:12 2018 +0900

    Merge branch 'master-ce' into fix-environment-status-in-merge-request-widget

commit cfb05ed27a37f815721372731882af8c6a6efd54
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 20:59:15 2018 +0900

    Add proxy status for frontend

commit e6b3d65c53d97285b4f1575146b44a540e3fc4bf
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 20:47:23 2018 +0900

    Prevent nil exception in environment status

commit 23d4e37ebd83615326e749cce43178208e5ff76c
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 18:36:06 2018 +0900

    Fix typo in spec

commit 963b0fcedeaf22b949d9f3cef4b662146c9c003d
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 18:22:20 2018 +0900

    Add feature spec

commit 9cff0225cc8da1b787207b06858ef6a63ad7513f
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 17:19:55 2018 +0900

    Fix 19 environments fixtures

commit 7c8eaf7b1fc95fea4f0ae4cf21d291ce7009fb05
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 16:18:08 2018 +0900

    Remove spec for first_deployment_for

commit d42cc1e0894a8132a4c543f7ff133e37a4670a2b
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 16:16:52 2018 +0900

    Fix 14_pipelines fixture

commit ef12bdcb4e82f8347f6b8ced253e98c804f3ad4f
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 15:31:38 2018 +0900

    Save environment object in Start Environment Service

commit 55e12a55b86a783f9d470573288f3a94d8bb0a88
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 14:49:55 2018 +0900

    Fix spec and add spec for deployed? and stopped?

commit 64d9527e824e5a7af60db05881f095c24f0c60c9
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 14:26:36 2018 +0900

    Fix flaky spec

commit 4c623409d8b53ec8904d790f5137adc8a0ce1f2e
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 14:21:46 2018 +0900

    Optimize queries

commit 4ab4364e868927873fb39a406a9d74f7c89761c6
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 13:44:08 2018 +0900

    Dry up the implementation

commit 53ba2f8a54bd78b0cad03b7f83fdf0837ccb1d74
Merge: 3aa2fe502ee 65a7a6e5
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 13:39:15 2018 +0900

    Merge branch 'stateful_deployments' into fix-environment-status-in-merge-request-widget

commit 3aa2fe502eee00e42894e4bac13f50a76c67e816
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 13:25:56 2018 +0900

    Create scope for deployed and stopped

commit 3a9c59a6ee1a2e225b916b9485851d50163f5fae
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 12:55:44 2018 +0900

    Add spec for stop environmet service

commit 1a982dda6939debeb994aff799a86c9f480d977d
Merge: f716f4ff670 56226498
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 11:47:11 2018 +0900

    Merge branch 'stateful_deployments' into fix-environment-status-in-merge-request-widget

commit f716f4ff6705aae279b07c6c93d4dafd6ce925e6
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 11:44:26 2018 +0900

    Define environmet services explicitly

commit 774d236f3851731f8650534a5ce19a950274497c
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 11:10:23 2018 +0900

    Fix conflicts

commit 320544b042c08e9e2f190d95ab5d988c37b3b7e7
Merge: 826fc250814 5f47ebaa
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 6 11:07:06 2018 +0900

    Merge branch 'stateful_deployments' into fix-environment-status-in-merge-request-widget

commit 826fc25081489ea646ddcdc626fc7cd120ed39a2
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 22:44:59 2018 +0900

    Fix typo

commit dd21e9a21fffcce6b1ffcb2ff389bb8f018bbd33
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 22:35:12 2018 +0900

    Add spec

commit f131e3bc36b995b70befc7556b2aa5ca287e3313
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 20:09:59 2018 +0900

    Update changelog

commit a2f93fcc40e6ad4c0aa54a3e597869e594cab730
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 20:01:12 2018 +0900

    Fix fork project problem in first_deployment_for

commit aa778934069559eaf10d8fa2c107d0b7550e6ff6
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 19:06:46 2018 +0900

    Remove unnecessary changes

commit 93c4b58e4d78558ff02ef09be1214683343c505b
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 15:56:26 2018 +0900

    Efficient way to search deployment

commit 99653d025ea431f00c6fa09cbf0b91f39f9f6e34
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 15:23:41 2018 +0900

    Fix environment status

commit 5dda167e394a008008d2829763adea0c1488b850
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 10:09:49 2018 +0900

    Add tests for action column

commit 52f7b09127d19f956c289c72d15ca8ab817b8d70
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 10:05:05 2018 +0900

    Fix conflicts

commit c63626c3b5ec1aecb45f7766cb6438e9c6229a0c
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 10:03:56 2018 +0900

    Fix unnecessary changes

commit 8077e1237a56befdfb3211165b7ef888e00f9712
Merge: 06946cbec9e d1b59cf6
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 10:01:51 2018 +0900

    Merge branch 'stateful_deployments' into add-action-to-deployment

commit d1b59cf6
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 5 09:37:40 2018 +0900

    Squashed commit of the following:

    commit 931d6ab0e025b0268d94e455f736b09a025e0578
    Merge: b34d165320d 93846eb1
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Mon Nov 5 09:36:58 2018 +0900

        Merge branch 'master-ce' into stateful_deployments

    commit b34d165320d6f3298c8b776ba66270a59c217412
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Nov 2 18:07:08 2018 +0900

        Fix flaky spec

    commit b5e0527c5d4fe8f18b2fdda5916bae9b8cd859a4
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Nov 2 15:32:03 2018 +0900

        Fix spec

    commit f78a5e96e66fe2d25086df495e339b470a274df8
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Nov 2 14:59:29 2018 +0900

        Remove unnecessary line in schema.rb

    commit 6ce7c483e0591b5d6f9588a99853834327b80031
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Nov 2 14:55:48 2018 +0900

        Add partial index for filling deployment at migration

    commit aecccfb5118c8982db3ba502fdf37b5e639fbfc6
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Nov 2 14:42:24 2018 +0900

        Fix fill empty finished at migration

    commit 0199e1761ad1b391ae87a53a9a113d3256529e0e
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Nov 2 14:19:44 2018 +0900

        Fix flaky spec

    commit 56ac84cd8095afab5b909119445537b7da06a2ff
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Nov 2 10:06:49 2018 +0900

        Fix guard clause to prevent multiple deployments to a job

    commit 521561b6b303b54635c30cb23d78e49d14cec53d
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 20:19:24 2018 +0900

        Fix spec

    commit 2878da0d29b9bd2dde69a1b216203df118dd59a1
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 19:38:59 2018 +0900

        Simplify the factory

    commit 22fd7df02133f3a21828554965fd5619905eac2c
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 19:33:50 2018 +0900

        Simplify the Deployable and BuildSuccessWorker

    commit 41108959677ed614f4548443a2f4303c4c04925a
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 18:34:20 2018 +0900

        Fix spec

    commit ae75fe7461ac72f621498797f478d42331342b84
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 17:19:12 2018 +0900

        Fix weird virtual deployment status

    commit 380fee7494d06407dccc292c3cbedbcee7b6e235
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 15:59:31 2018 +0900

        Fix spec

    commit 29889fcbaadb3bbfd2f11c10bfbf5dceb3e3ddba
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 15:07:10 2018 +0900

        Fix coding offence

    commit 36ac13f345f5ef25725c2236a791a40a3a9e6126
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 14:22:17 2018 +0900

        Squashed commit of the following:

        commit ba9aede922e1643db3f06c56736d46d6d86d356b
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Nov 1 14:21:33 2018 +0900

            Fix ambiguious factory specification in update deployment service spec

        commit 013afb5668cb30dc4ca5b21945c17b341e7ea7f9
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Nov 1 14:10:24 2018 +0900

            Fix spec

        commit 78793670d049e2dfb5fc98177eb4d10f20b9310b
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 31 18:26:12 2018 +0900

            Fix spec

        commit 73d27e87c66698f2e3a817bb8728f02475b7ba4f
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 31 16:22:14 2018 +0900

            Fix index

        commit 8580a226ea68bf5e49b35bfb5f404968bbfaf8e9
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 31 15:34:57 2018 +0900

            Fix deployment relationships in Ci::Build

        commit d6d28b55afd1179200b4f5188e0b53079ff3c1a7
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 31 15:27:53 2018 +0900

            Fix spec

        commit 94eb754e2e1bb9a1fe627f86823f571a8298d27b
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 31 14:07:11 2018 +0900

            Fix spec

        commit 0b30f80bcd08a7a06bdde3378ec1733f865284be
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 20:15:31 2018 +0900

            Fix spec

        commit 466bdcdb6af8cdb475c9fa16bd7d1dff23b11e40
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 19:28:51 2018 +0900

            Fix spec

        commit a7c3caac99139e70fe3f1f3d14856939fa25c527
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 17:33:47 2018 +0900

            Fix factory

        commit cea28ae100532e6711ce1d22676719a94e2da8a0
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 16:28:18 2018 +0900

            Drop leagacy success

        commit 3785d685eabc10b6597cf3db67bf08385ccf298a
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 15:37:28 2018 +0900

            Remove unnecessary migration file

        commit 0d597fa46eeffdbb9a4afb53005a8183e433c6bf
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 15:35:53 2018 +0900

            Fix schema.rb

        commit ec3c2abc6944e09f6410468ae5e356865ec7b02b
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 15:34:21 2018 +0900

            Rename post migration file

        commit 0e7281885a84656acf95f0f423732680f8fec076
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 15:31:01 2018 +0900

            Remove include EnumWithNil

        commit b3846d59c07e07275126c70361bde7f30810729e
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 15:05:50 2018 +0900

            Decouple action

        commit c9f9ba4eae9ca1edc7d8751e1d2e0572cb222d9c
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 14:23:29 2018 +0900

            Remove status mock

        commit d95bfea1ca67b3a27a3226a669c2b1266d696682
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 14:17:14 2018 +0900

            Add action

        commit 0cec39e0f76c22a18498f46d65ad7226fb30c3f8
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 30 13:44:07 2018 +0900

            Remove unnecessary line in schema.rb

        commit 7b4c5f8e1b00dd8e6aa944352f9d8a9f3ae6f1c7
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 29 19:59:41 2018 +0900

            Revert build success worker

        commit 0c52ffa4a23eea488c187317e8b400369846f399
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 29 19:11:47 2018 +0900

            Use add_column_with_default properly

        commit ba9bae357da5dfd2f6ec05f7f9db9d0b31224f48
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 29 18:40:55 2018 +0900

            Fix with_status

        commit 75dffc97b9c5f6fa73d9d09b125c8f849fa2caae
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 29 16:26:56 2018 +0900

            Remove unnecessary line in schema.rb

        commit 25188ccc52fb29ca63b9205c4d95ffc2e0afadee
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 29 16:26:17 2018 +0900

            Set default values in regular migration

        commit 98ea037fbf39c8d9f0db77fb50e2d08382425158
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 26 17:27:49 2018 +0900

            Fix static analysis

        commit e7d1765f77f9ff9b94a34985a7855bdaab1da675
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 26 16:37:10 2018 +0900

            Remove empty spec

        commit 0033f521ed1eae8117dba231961aa47c068bbcfb
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 26 16:34:55 2018 +0900

            Simplify spec changes

        commit 0be4c6b3ade6d9a8bf28bcd177c66ebd7bb7d20a
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 26 16:32:45 2018 +0900

            Simplify spec changes

        commit a93d25d79df7e25bdf688fc938c712922f9dc4df
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 26 16:02:31 2018 +0900

            Fix flaky spec

        commit 339ad50cf471ca706b29f008ccd2bb881dd5b776
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 26 15:06:22 2018 +0900

            Rename Deployments Success worker

        commit bd69c78085adcb9b0f8ff9b7041ae355953ad7ab
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 26 14:43:03 2018 +0900

            Fix coding offence

        commit 004748b2a9c5236ec13eb01289418f3d6571c92c
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 20:09:10 2018 +0900

            Rename to update deployment service

        commit b04a85e761de501f030f3844fd485a2b9e46f7f7
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 18:46:52 2018 +0900

            Add spec for Project

        commit 548af23a5a07f0c20b72849d03aa0b98a0b49134
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 18:43:25 2018 +0900

            Fix spec

        commit c977e4d3f17194c46a1bf857b473017ce21ef7e9
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 17:58:07 2018 +0900

            Add spec for Environment

        commit 73feb9010f8d8093bee4b46e56d30cfef3e8e34a
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 17:39:24 2018 +0900

            Add spec for Deployment model

        commit 9a3cfbf766f402571588839375cf311bb9807035
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 17:18:02 2018 +0900

            Fix statis analysis

        commit a30d28dbc631a29855883ca89c592a10c012f1d2
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 17:17:32 2018 +0900

            Ignore nil instance

        commit fa6fdd89f380e588a6bcf14b1f9aef0d14d3854b
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 16:20:40 2018 +0900

            Add spec for deployable concern

        commit aa91186821dc671df2c7a641e37586dd5dfc1008
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 15:37:23 2018 +0900

            Clean up deployable

        commit 34d3e18731f7906a3db250b105a64d1db83c2fca
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 15:13:05 2018 +0900

            Fix 17 cycle analytics

        commit 8dc9e00408f9b390175e7d5ea743eed4fb9e3f79
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 25 13:56:51 2018 +0900

            Fix static analysys

        commit 5c4175807a537bafc4b889b0a97e8f96f0e483cd
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 24 15:05:05 2018 +0900

            Skip unnecessary sidekiq worker

        commit 9d8b5d423f49cc247c96ce3767d03b4af305809f
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 24 14:53:13 2018 +0900

            Add changelog

        commit c8cabba496722240cadf7c161c80bceb09727cba
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 24 14:44:45 2018 +0900

            Squashed commit of the following:

            commit f7643885ac2329e18d690a4e4f2d7614b732c793
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 19:38:45 2018 +0900

                Fix deployment widget specs

            commit 03bd04b5c98b634dff6a0ab4292c150a9031995c
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 17:50:16 2018 +0900

                Fix env status spec

            commit 4a49c6502b161a12f0f62d5ec167dff777047dab
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 17:48:59 2018 +0900

                Fix environment spec

            commit 4044822887987e20a703990ff20352a532eeb965
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 17:47:17 2018 +0900

                Fix environment spec

            commit 9939d44b7eb9da371de74c0f04fed1eb3db37ad3
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 15:45:43 2018 +0900

                Add a new spec for deployment success worker

            commit f61c4d3657b5ef13b5da171460da68a6643ad4b5
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 15:38:11 2018 +0900

                Fix cycle analytics helper

            commit b6242615e8298fb7fc047c8df8006c25ad717c70
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 14:41:54 2018 +0900

                Fix cycle analysis helper

            commit 9a001cb4c4ed6f3b87dc612bdffc60a6b2b0a132
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 14:37:08 2018 +0900

                Ignore coding offence in build success worker's spec

            commit 1fb88583025bac8a56172cbd59be04258ea4c5f3
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 23 14:33:11 2018 +0900

                Added more spec for deployments

            commit 1a6ba97ababbf62e8dd0ae0c56d75ab1268fd0ce
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 19:36:50 2018 +0900

                Move after create hookd into success worker

            commit 09de5fed5d6f108423779cf9d9e7f1d21f3c1c91
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 19:30:06 2018 +0900

                Fix build spec

            commit 73a55cbcabbb1e928eca3e53e8ff75dec178bc90
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 19:08:43 2018 +0900

                Fix update_deployment_metrics_service_spec.rb

            commit ee05136a02ae9fa348b4b89b9a69937ebb9697dd
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 17:32:05 2018 +0900

                Remove unnecessary degelate

            commit e246ddeebc01a807ccc36fdb484c3e72ad91e680
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 16:07:39 2018 +0900

                Remove unnecessary optimistic locking

            commit dcc225c8237b90e3bc8dcc3dc2e3252e0b0be093
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 16:00:22 2018 +0900

                Simplify status replication

            commit 13a5fd7afb67ba2712fcaecaea5fedf05f9ad177
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 15:29:24 2018 +0900

                Fix sidekiq queue names

            commit dcc796f48d523538e1c91b9cd3e1c7065e5329b1
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 15:23:55 2018 +0900

                Revert success check in update_merge_request_metrics

            commit 129ef083d637d4acb8c97a6d9ab96deb2ff6efcd
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 15:18:31 2018 +0900

                Fix queue name of deployment success worker

            commit 10fe5a6484f4f02322ce5bb16844fc7b1d565963
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 15:09:42 2018 +0900

                Introduce deployable module

            commit d91260bbe105bf46f6c06d9e9593c8c4cd5139cf
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 14:05:31 2018 +0900

                Add database index for successful deployments

            commit 74274147263de4b60870065a19935498ce662e30
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Mon Oct 22 13:51:59 2018 +0900

                Fix invalid state transition

            commit ff18463cc847bf3cf5a3e49f3651eedfdf67c7e6
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Fri Oct 19 20:05:15 2018 +0900

                Fix coding style offence

            commit 0202c0f5b631601edab7b359b087b307f5eb7ba3
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Fri Oct 19 18:34:07 2018 +0900

                Target only successful deployments from other relations

            commit 1f2758cb030dec1df5dda30f6bc3e25b6d0841c9
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Fri Oct 19 18:21:28 2018 +0900

                Add namespace explicitly

            commit 3d9227b6e5642cecde88d4edac925125f6474b11
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Fri Oct 19 17:42:30 2018 +0900

                Fix spec in DeleteInconsistentInternalIdRecords

            commit 3e0cc99ff6c5c7188511618228a6ec027752ce69
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Fri Oct 19 16:10:16 2018 +0900

                Fixed spec

            commit 8de09b8bb31f7b9f24ecdf9f2dd8ef358a260263
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Fri Oct 19 14:22:35 2018 +0900

                Fix create deployment service

            commit 31957570b4444492eeb412e765f96a56416c25f3
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Thu Oct 18 20:21:26 2018 +0900

                Move CreateDeploymentService. Fix Cycle analytics spec and fixture.

            commit d2eb433a1bb9710c0d4778c4f34c12b6b64f60e6
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Thu Oct 18 20:11:22 2018 +0900

                Fix build success worker

            commit 25e6cd87138bcdb69de8785ca367e479c8dbcc59
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Thu Oct 18 19:49:13 2018 +0900

                Fix create deployment service spec

            commit d268bf410bf65e86c81eb76d50aa8e145b32d249
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Thu Oct 18 19:01:23 2018 +0900

                Fix cycle analysys spec's deployment

            commit 525ade8aa1e4394ed8a759bb0437e407fbe74a35
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Thu Oct 18 18:24:04 2018 +0900

                Fix factory to set legacy status by default

            commit c6a990821ac0a1ffa49e20e2d78d94b8ce075914
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Thu Oct 18 17:25:40 2018 +0900

                Remove unnecessary lib from deployment

            commit a6107e0e85ac26ee09da3316ebc11de32f067d82
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Wed Oct 17 17:38:58 2018 +0900

                Fix recursive call

            commit 15c5f3b64061a75af3c3039ca7f49b1cc4ff3068
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Wed Oct 17 17:30:44 2018 +0900

                Add finished_at

            commit c8d3d70366f694d78acb7e30d342c7697798b922
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Wed Oct 17 15:55:31 2018 +0900

                Fix last_deployment methods as it used to return successful deployment always

            commit 96bbe8670cece021766fde95fe573cbbe23d1e55
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Wed Oct 17 15:49:57 2018 +0900

                Redefine statuses

            commit c86a9d0bd2ab3e7a00bf61f094a96ee99b76b289
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Wed Oct 17 14:50:27 2018 +0900

                Fix schema.rb

            commit 9ff5f0eaafbc08795018c7bb282b19f6327dee21
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Wed Oct 17 14:18:04 2018 +0900

                Default status nil to success

            commit 5928bd9bb94e1e8908ed1561e01595be84d5f4ec
            Author: Shinya Maeda <shinya@gitlab.com>
            Date:   Tue Oct 16 15:13:48 2018 +0900

                Add status to Deployment

commit 06946cbec9e76398cdf2c590fd13e3f71c04595f
Merge: 1ac4a7fed37 20b59da2ea3
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Fri Nov 2 10:14:22 2018 +0900

    Merge branch 'stateful_deployments' into add-action-to-deployment

commit 20b59da2ea3ae850e8b2e823013536c2c7275156
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Fri Nov 2 10:06:49 2018 +0900

    Fix guard clause to prevent multiple deployments to a job

commit 1ac4a7fed376ba8dd1e692af0e197d55cc1cb900
Merge: 34bd4866c16 7aade362361
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 20:21:25 2018 +0900

    Merge branch 'stateful_deployments' into add-action-to-deployment

commit 7aade362361af7eedf1db50dc46369187fce21cc
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 20:19:24 2018 +0900

    Fix spec

commit 90d05b1c0cb09658f02739ad8a53ef74238aa8cf
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 19:38:59 2018 +0900

    Simplify the factory

commit 1fbdd07c48821ea8a138932dd3c401eb85ae5ca3
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 19:33:50 2018 +0900

    Simplify the Deployable and BuildSuccessWorker

commit 519765699b90dd92ddef6d1f5cde5123c7d4b473
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 18:34:20 2018 +0900

    Fix spec

commit e88f464d275e743af590b4dac6f8a636023ed9b7
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 17:19:12 2018 +0900

    Fix weird virtual deployment status

commit 2f493a948bdedc54d8d06e802090795a146b7085
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 15:59:31 2018 +0900

    Fix spec

commit 34bd4866c161bc02333b0e9e7a710110885e8bd0
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 15:34:10 2018 +0900

    Revert unnecessary changes

commit bbdc18d4e697d953f4f3320815eae2767049a922
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 15:32:27 2018 +0900

    Simplify the implementation

commit 3bd7996919613adbe517c633e30f4f06555df7dc
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 15:27:11 2018 +0900

    Add changelog

commit 210631ac3ecc01361238a1ff296949da36ea4773
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 15:22:44 2018 +0900

    Add action to deployment

commit 9bd4b2e8b1b86dda98b8cad6886a8075f75f28d4
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 15:07:10 2018 +0900

    Fix coding offence

commit c5c6871699f880689621d776564b8e0bb7729eda
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 14:22:17 2018 +0900

    Squashed commit of the following:

    commit ba9aede922e1643db3f06c56736d46d6d86d356b
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 14:21:33 2018 +0900

        Fix ambiguious factory specification in update deployment service spec

    commit 013afb5668cb30dc4ca5b21945c17b341e7ea7f9
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Nov 1 14:10:24 2018 +0900

        Fix spec

    commit 78793670d049e2dfb5fc98177eb4d10f20b9310b
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Wed Oct 31 18:26:12 2018 +0900

        Fix spec

    commit 73d27e87c66698f2e3a817bb8728f02475b7ba4f
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Wed Oct 31 16:22:14 2018 +0900

        Fix index

    commit 8580a226ea68bf5e49b35bfb5f404968bbfaf8e9
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Wed Oct 31 15:34:57 2018 +0900

        Fix deployment relationships in Ci::Build

    commit d6d28b55afd1179200b4f5188e0b53079ff3c1a7
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Wed Oct 31 15:27:53 2018 +0900

        Fix spec

    commit 94eb754e2e1bb9a1fe627f86823f571a8298d27b
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Wed Oct 31 14:07:11 2018 +0900

        Fix spec

    commit 0b30f80bcd08a7a06bdde3378ec1733f865284be
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 20:15:31 2018 +0900

        Fix spec

    commit 466bdcdb6af8cdb475c9fa16bd7d1dff23b11e40
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 19:28:51 2018 +0900

        Fix spec

    commit a7c3caac99139e70fe3f1f3d14856939fa25c527
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 17:33:47 2018 +0900

        Fix factory

    commit cea28ae100532e6711ce1d22676719a94e2da8a0
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 16:28:18 2018 +0900

        Drop leagacy success

    commit 3785d685eabc10b6597cf3db67bf08385ccf298a
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 15:37:28 2018 +0900

        Remove unnecessary migration file

    commit 0d597fa46eeffdbb9a4afb53005a8183e433c6bf
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 15:35:53 2018 +0900

        Fix schema.rb

    commit ec3c2abc6944e09f6410468ae5e356865ec7b02b
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 15:34:21 2018 +0900

        Rename post migration file

    commit 0e7281885a84656acf95f0f423732680f8fec076
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 15:31:01 2018 +0900

        Remove include EnumWithNil

    commit b3846d59c07e07275126c70361bde7f30810729e
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 15:05:50 2018 +0900

        Decouple action

    commit c9f9ba4eae9ca1edc7d8751e1d2e0572cb222d9c
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 14:23:29 2018 +0900

        Remove status mock

    commit d95bfea1ca67b3a27a3226a669c2b1266d696682
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 14:17:14 2018 +0900

        Add action

    commit 0cec39e0f76c22a18498f46d65ad7226fb30c3f8
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Tue Oct 30 13:44:07 2018 +0900

        Remove unnecessary line in schema.rb

    commit 7b4c5f8e1b00dd8e6aa944352f9d8a9f3ae6f1c7
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Mon Oct 29 19:59:41 2018 +0900

        Revert build success worker

    commit 0c52ffa4a23eea488c187317e8b400369846f399
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Mon Oct 29 19:11:47 2018 +0900

        Use add_column_with_default properly

    commit ba9bae357da5dfd2f6ec05f7f9db9d0b31224f48
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Mon Oct 29 18:40:55 2018 +0900

        Fix with_status

    commit 75dffc97b9c5f6fa73d9d09b125c8f849fa2caae
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Mon Oct 29 16:26:56 2018 +0900

        Remove unnecessary line in schema.rb

    commit 25188ccc52fb29ca63b9205c4d95ffc2e0afadee
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Mon Oct 29 16:26:17 2018 +0900

        Set default values in regular migration

    commit 98ea037fbf39c8d9f0db77fb50e2d08382425158
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Oct 26 17:27:49 2018 +0900

        Fix static analysis

    commit e7d1765f77f9ff9b94a34985a7855bdaab1da675
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Oct 26 16:37:10 2018 +0900

        Remove empty spec

    commit 0033f521ed1eae8117dba231961aa47c068bbcfb
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Oct 26 16:34:55 2018 +0900

        Simplify spec changes

    commit 0be4c6b3ade6d9a8bf28bcd177c66ebd7bb7d20a
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Oct 26 16:32:45 2018 +0900

        Simplify spec changes

    commit a93d25d79df7e25bdf688fc938c712922f9dc4df
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Oct 26 16:02:31 2018 +0900

        Fix flaky spec

    commit 339ad50cf471ca706b29f008ccd2bb881dd5b776
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Oct 26 15:06:22 2018 +0900

        Rename Deployments Success worker

    commit bd69c78085adcb9b0f8ff9b7041ae355953ad7ab
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Fri Oct 26 14:43:03 2018 +0900

        Fix coding offence

    commit 004748b2a9c5236ec13eb01289418f3d6571c92c
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 20:09:10 2018 +0900

        Rename to update deployment service

    commit b04a85e761de501f030f3844fd485a2b9e46f7f7
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 18:46:52 2018 +0900

        Add spec for Project

    commit 548af23a5a07f0c20b72849d03aa0b98a0b49134
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 18:43:25 2018 +0900

        Fix spec

    commit c977e4d3f17194c46a1bf857b473017ce21ef7e9
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 17:58:07 2018 +0900

        Add spec for Environment

    commit 73feb9010f8d8093bee4b46e56d30cfef3e8e34a
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 17:39:24 2018 +0900

        Add spec for Deployment model

    commit 9a3cfbf766f402571588839375cf311bb9807035
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 17:18:02 2018 +0900

        Fix statis analysis

    commit a30d28dbc631a29855883ca89c592a10c012f1d2
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 17:17:32 2018 +0900

        Ignore nil instance

    commit fa6fdd89f380e588a6bcf14b1f9aef0d14d3854b
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 16:20:40 2018 +0900

        Add spec for deployable concern

    commit aa91186821dc671df2c7a641e37586dd5dfc1008
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 15:37:23 2018 +0900

        Clean up deployable

    commit 34d3e18731f7906a3db250b105a64d1db83c2fca
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 15:13:05 2018 +0900

        Fix 17 cycle analytics

    commit 8dc9e00408f9b390175e7d5ea743eed4fb9e3f79
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Thu Oct 25 13:56:51 2018 +0900

        Fix static analysys

    commit 5c4175807a537bafc4b889b0a97e8f96f0e483cd
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Wed Oct 24 15:05:05 2018 +0900

        Skip unnecessary sidekiq worker

    commit 9d8b5d423f49cc247c96ce3767d03b4af305809f
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Wed Oct 24 14:53:13 2018 +0900

        Add changelog

    commit c8cabba496722240cadf7c161c80bceb09727cba
    Author: Shinya Maeda <shinya@gitlab.com>
    Date:   Wed Oct 24 14:44:45 2018 +0900

        Squashed commit of the following:

        commit f7643885ac2329e18d690a4e4f2d7614b732c793
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 19:38:45 2018 +0900

            Fix deployment widget specs

        commit 03bd04b5c98b634dff6a0ab4292c150a9031995c
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 17:50:16 2018 +0900

            Fix env status spec

        commit 4a49c6502b161a12f0f62d5ec167dff777047dab
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 17:48:59 2018 +0900

            Fix environment spec

        commit 4044822887987e20a703990ff20352a532eeb965
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 17:47:17 2018 +0900

            Fix environment spec

        commit 9939d44b7eb9da371de74c0f04fed1eb3db37ad3
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 15:45:43 2018 +0900

            Add a new spec for deployment success worker

        commit f61c4d3657b5ef13b5da171460da68a6643ad4b5
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 15:38:11 2018 +0900

            Fix cycle analytics helper

        commit b6242615e8298fb7fc047c8df8006c25ad717c70
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 14:41:54 2018 +0900

            Fix cycle analysis helper

        commit 9a001cb4c4ed6f3b87dc612bdffc60a6b2b0a132
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 14:37:08 2018 +0900

            Ignore coding offence in build success worker's spec

        commit 1fb88583025bac8a56172cbd59be04258ea4c5f3
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 23 14:33:11 2018 +0900

            Added more spec for deployments

        commit 1a6ba97ababbf62e8dd0ae0c56d75ab1268fd0ce
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 19:36:50 2018 +0900

            Move after create hookd into success worker

        commit 09de5fed5d6f108423779cf9d9e7f1d21f3c1c91
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 19:30:06 2018 +0900

            Fix build spec

        commit 73a55cbcabbb1e928eca3e53e8ff75dec178bc90
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 19:08:43 2018 +0900

            Fix update_deployment_metrics_service_spec.rb

        commit ee05136a02ae9fa348b4b89b9a69937ebb9697dd
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 17:32:05 2018 +0900

            Remove unnecessary degelate

        commit e246ddeebc01a807ccc36fdb484c3e72ad91e680
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 16:07:39 2018 +0900

            Remove unnecessary optimistic locking

        commit dcc225c8237b90e3bc8dcc3dc2e3252e0b0be093
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 16:00:22 2018 +0900

            Simplify status replication

        commit 13a5fd7afb67ba2712fcaecaea5fedf05f9ad177
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 15:29:24 2018 +0900

            Fix sidekiq queue names

        commit dcc796f48d523538e1c91b9cd3e1c7065e5329b1
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 15:23:55 2018 +0900

            Revert success check in update_merge_request_metrics

        commit 129ef083d637d4acb8c97a6d9ab96deb2ff6efcd
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 15:18:31 2018 +0900

            Fix queue name of deployment success worker

        commit 10fe5a6484f4f02322ce5bb16844fc7b1d565963
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 15:09:42 2018 +0900

            Introduce deployable module

        commit d91260bbe105bf46f6c06d9e9593c8c4cd5139cf
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 14:05:31 2018 +0900

            Add database index for successful deployments

        commit 74274147263de4b60870065a19935498ce662e30
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Mon Oct 22 13:51:59 2018 +0900

            Fix invalid state transition

        commit ff18463cc847bf3cf5a3e49f3651eedfdf67c7e6
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 19 20:05:15 2018 +0900

            Fix coding style offence

        commit 0202c0f5b631601edab7b359b087b307f5eb7ba3
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 19 18:34:07 2018 +0900

            Target only successful deployments from other relations

        commit 1f2758cb030dec1df5dda30f6bc3e25b6d0841c9
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 19 18:21:28 2018 +0900

            Add namespace explicitly

        commit 3d9227b6e5642cecde88d4edac925125f6474b11
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 19 17:42:30 2018 +0900

            Fix spec in DeleteInconsistentInternalIdRecords

        commit 3e0cc99ff6c5c7188511618228a6ec027752ce69
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 19 16:10:16 2018 +0900

            Fixed spec

        commit 8de09b8bb31f7b9f24ecdf9f2dd8ef358a260263
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Fri Oct 19 14:22:35 2018 +0900

            Fix create deployment service

        commit 31957570b4444492eeb412e765f96a56416c25f3
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 18 20:21:26 2018 +0900

            Move CreateDeploymentService. Fix Cycle analytics spec and fixture.

        commit d2eb433a1bb9710c0d4778c4f34c12b6b64f60e6
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 18 20:11:22 2018 +0900

            Fix build success worker

        commit 25e6cd87138bcdb69de8785ca367e479c8dbcc59
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 18 19:49:13 2018 +0900

            Fix create deployment service spec

        commit d268bf410bf65e86c81eb76d50aa8e145b32d249
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 18 19:01:23 2018 +0900

            Fix cycle analysys spec's deployment

        commit 525ade8aa1e4394ed8a759bb0437e407fbe74a35
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 18 18:24:04 2018 +0900

            Fix factory to set legacy status by default

        commit c6a990821ac0a1ffa49e20e2d78d94b8ce075914
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Thu Oct 18 17:25:40 2018 +0900

            Remove unnecessary lib from deployment

        commit a6107e0e85ac26ee09da3316ebc11de32f067d82
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 17 17:38:58 2018 +0900

            Fix recursive call

        commit 15c5f3b64061a75af3c3039ca7f49b1cc4ff3068
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 17 17:30:44 2018 +0900

            Add finished_at

        commit c8d3d70366f694d78acb7e30d342c7697798b922
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 17 15:55:31 2018 +0900

            Fix last_deployment methods as it used to return successful deployment always

        commit 96bbe8670cece021766fde95fe573cbbe23d1e55
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 17 15:49:57 2018 +0900

            Redefine statuses

        commit c86a9d0bd2ab3e7a00bf61f094a96ee99b76b289
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 17 14:50:27 2018 +0900

            Fix schema.rb

        commit 9ff5f0eaafbc08795018c7bb282b19f6327dee21
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Wed Oct 17 14:18:04 2018 +0900

            Default status nil to success

        commit 5928bd9bb94e1e8908ed1561e01595be84d5f4ec
        Author: Shinya Maeda <shinya@gitlab.com>
        Date:   Tue Oct 16 15:13:48 2018 +0900

            Add status to Deployment
parent cf8fe12b
...@@ -6,7 +6,7 @@ class Projects::DeploymentsController < Projects::ApplicationController ...@@ -6,7 +6,7 @@ class Projects::DeploymentsController < Projects::ApplicationController
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def index def index
deployments = environment.deployments.reorder(created_at: :desc) deployments = environment.deployments.deployed.reorder(created_at: :desc)
deployments = deployments.where('created_at > ?', params[:after].to_time) if params[:after]&.to_time deployments = deployments.where('created_at > ?', params[:after].to_time) if params[:after]&.to_time
render json: { deployments: DeploymentSerializer.new(project: project) render json: { deployments: DeploymentSerializer.new(project: project)
...@@ -47,7 +47,7 @@ class Projects::DeploymentsController < Projects::ApplicationController ...@@ -47,7 +47,7 @@ class Projects::DeploymentsController < Projects::ApplicationController
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def deployment def deployment
@deployment ||= environment.deployments.find_by(iid: params[:id]) @deployment ||= environment.deployments.deployed.find_by(iid: params[:id])
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
......
...@@ -58,7 +58,7 @@ class Projects::EnvironmentsController < Projects::ApplicationController ...@@ -58,7 +58,7 @@ class Projects::EnvironmentsController < Projects::ApplicationController
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def show def show
@deployments = environment.deployments.order(id: :desc).page(params[:page]) @deployments = environment.deployments.deployed.order(id: :desc).page(params[:page])
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
......
...@@ -9,7 +9,7 @@ class EnvironmentsFinder ...@@ -9,7 +9,7 @@ class EnvironmentsFinder
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def execute def execute
deployments = project.deployments deployments = project.deployments.deployed
deployments = deployments =
if ref if ref
deployments_query = params[:with_tags] ? 'ref = :ref OR tag IS TRUE' : 'ref = :ref' deployments_query = params[:with_tags] ? 'ref = :ref OR tag IS TRUE' : 'ref = :ref'
......
...@@ -7,7 +7,7 @@ module Deployable ...@@ -7,7 +7,7 @@ module Deployable
after_create :create_deployment after_create :create_deployment
def create_deployment def create_deployment
return unless starts_environment? && !has_deployment? return unless has_environment? && !has_deployment?
environment = project.environments.find_or_create_by( environment = project.environments.find_or_create_by(
name: expanded_environment_name name: expanded_environment_name
...@@ -21,7 +21,8 @@ module Deployable ...@@ -21,7 +21,8 @@ module Deployable
sha: sha, sha: sha,
user: user, user: user,
deployable: self, deployable: self,
on_stop: on_stop).tap do |_| on_stop: on_stop,
action: environment_action).tap do |_|
self.reload # Reload relationships self.reload # Reload relationships
end end
end end
......
...@@ -18,6 +18,8 @@ class Deployment < ActiveRecord::Base ...@@ -18,6 +18,8 @@ class Deployment < ActiveRecord::Base
delegate :name, to: :environment, prefix: true delegate :name, to: :environment, prefix: true
scope :for_environment, -> (environment) { where(environment_id: environment) } scope :for_environment, -> (environment) { where(environment_id: environment) }
scope :deployed, -> { success.start }
scope :stopped, -> { success.stop }
state_machine :status, initial: :created do state_machine :status, initial: :created do
event :run do event :run do
...@@ -55,6 +57,11 @@ class Deployment < ActiveRecord::Base ...@@ -55,6 +57,11 @@ class Deployment < ActiveRecord::Base
canceled: 4 canceled: 4
} }
enum action: {
start: 1,
stop: 2
}
def self.last_for_environment(environment) def self.last_for_environment(environment)
ids = self ids = self
.for_environment(environment) .for_environment(environment)
...@@ -130,7 +137,7 @@ class Deployment < ActiveRecord::Base ...@@ -130,7 +137,7 @@ class Deployment < ActiveRecord::Base
def previous_deployment def previous_deployment
@previous_deployment ||= @previous_deployment ||=
project.deployments.joins(:environment) project.deployments.deployed.joins(:environment)
.where(environments: { name: self.environment.name }, ref: self.ref) .where(environments: { name: self.environment.name }, ref: self.ref)
.where.not(id: self.id) .where.not(id: self.id)
.take .take
...@@ -175,6 +182,14 @@ class Deployment < ActiveRecord::Base ...@@ -175,6 +182,14 @@ class Deployment < ActiveRecord::Base
metrics&.merge(deployment_time: finished_at.to_i) || {} metrics&.merge(deployment_time: finished_at.to_i) || {}
end end
def deployed?
success? && start?
end
def stopped?
success? && stop?
end
private private
def prometheus_adapter def prometheus_adapter
......
...@@ -8,9 +8,9 @@ class Environment < ActiveRecord::Base ...@@ -8,9 +8,9 @@ class Environment < ActiveRecord::Base
belongs_to :project, required: true belongs_to :project, required: true
has_many :deployments, -> { success }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent has_many :deployments, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_one :last_deployment, -> { success.order('deployments.id DESC') }, class_name: 'Deployment' has_one :last_deployment, -> { deployed.order('deployments.id DESC') }, class_name: 'Deployment'
before_validation :nullify_external_url before_validation :nullify_external_url
before_validation :generate_slug, if: ->(env) { env.slug.blank? } before_validation :generate_slug, if: ->(env) { env.slug.blank? }
...@@ -50,6 +50,7 @@ class Environment < ActiveRecord::Base ...@@ -50,6 +50,7 @@ class Environment < ActiveRecord::Base
scope :in_review_folder, -> { where(environment_type: "review") } scope :in_review_folder, -> { where(environment_type: "review") }
scope :for_name, -> (name) { where(name: name) } scope :for_name, -> (name) { where(name: name) }
scope :for_project, -> (project) { where(project_id: project) } scope :for_project, -> (project) { where(project_id: project) }
scope :with_deployment, -> (sha) { where('EXISTS (?)', Deployment.select(1).start.where('deployments.environment_id = environments.id').where(sha: sha)) }
state_machine :state, initial: :available do state_machine :state, initial: :available do
event :start do event :start do
...@@ -95,22 +96,13 @@ class Environment < ActiveRecord::Base ...@@ -95,22 +96,13 @@ class Environment < ActiveRecord::Base
end end
def last_deployed_at def last_deployed_at
last_deployment.try(:created_at) last_deployment.try(:finished_at)
end end
def update_merge_request_metrics? def update_merge_request_metrics?
folder_name == "production" folder_name == "production"
end end
def first_deployment_for(commit_sha)
ref = project.repository.ref_name_for_sha(ref_path, commit_sha)
return nil unless ref
deployment_iid = ref.split('/').last
deployments.find_by(iid: deployment_iid)
end
def ref_path def ref_path
"refs/#{Repository::REF_ENVIRONMENTS}/#{slug}" "refs/#{Repository::REF_ENVIRONMENTS}/#{slug}"
end end
......
...@@ -8,17 +8,16 @@ class EnvironmentStatus ...@@ -8,17 +8,16 @@ class EnvironmentStatus
delegate :id, to: :environment delegate :id, to: :environment
delegate :name, to: :environment delegate :name, to: :environment
delegate :project, to: :environment delegate :project, to: :environment
delegate :status, to: :deployment, allow_nil: true
delegate :deployed_at, to: :deployment, allow_nil: true delegate :deployed_at, to: :deployment, allow_nil: true
def self.for_merge_request(mr, user) def self.for_merge_request(mr, user)
build_environments_status(mr, user, mr.head_pipeline) build_environments_status(mr, user, mr.diff_head_sha)
end end
def self.after_merge_request(mr, user) def self.after_merge_request(mr, user)
return [] unless mr.merged? return [] unless mr.merged?
build_environments_status(mr, user, mr.merge_pipeline) build_environments_status(mr, user, mr.merge_commit_sha)
end end
def initialize(environment, merge_request, sha) def initialize(environment, merge_request, sha)
...@@ -29,7 +28,7 @@ class EnvironmentStatus ...@@ -29,7 +28,7 @@ class EnvironmentStatus
def deployment def deployment
strong_memoize(:deployment) do strong_memoize(:deployment) do
environment.first_deployment_for(sha) environment.deployments.start.find_by_sha(sha)
end end
end end
...@@ -44,6 +43,20 @@ class EnvironmentStatus ...@@ -44,6 +43,20 @@ class EnvironmentStatus
.merge_request_diff_files.where(deleted_file: false) .merge_request_diff_files.where(deleted_file: false)
end end
##
# Since frontend has not supported all statuses yet, BE has to
# proxy some status to a supported status.
def status
case deployment.status
when 'created'
'running'
when 'canceled'
'failed'
else
deployment.status
end
end
private private
PAGE_EXTENSIONS = /\A\.(s?html?|php|asp|cgi|pl)\z/i.freeze PAGE_EXTENSIONS = /\A\.(s?html?|php|asp|cgi|pl)\z/i.freeze
...@@ -61,21 +74,14 @@ class EnvironmentStatus ...@@ -61,21 +74,14 @@ class EnvironmentStatus
} }
end end
def self.build_environments_status(mr, user, pipeline) def self.build_environments_status(mr, user, sha)
return [] unless pipeline.present? Environment.where(project_id: [mr.source_project_id, mr.target_project_id])
.available
.with_deployment(sha).map do |environment|
next unless Ability.allowed?(user, :read_environment, environment)
find_environments(user, pipeline).map do |environment| EnvironmentStatus.new(environment, mr, sha)
EnvironmentStatus.new(environment, mr, pipeline.sha) end.compact
end
end end
private_class_method :build_environments_status private_class_method :build_environments_status
def self.find_environments(user, pipeline)
env_ids = Deployment.where(deployable: pipeline.builds).select(:environment_id)
Environment.available.where(id: env_ids).select do |environment|
Ability.allowed?(user, :read_environment, environment)
end
end
private_class_method :find_environments
end end
...@@ -254,7 +254,7 @@ class Project < ActiveRecord::Base ...@@ -254,7 +254,7 @@ class Project < ActiveRecord::Base
has_many :variables, class_name: 'Ci::Variable' has_many :variables, class_name: 'Ci::Variable'
has_many :triggers, class_name: 'Ci::Trigger' has_many :triggers, class_name: 'Ci::Trigger'
has_many :environments has_many :environments
has_many :deployments, -> { success } has_many :deployments
has_many :pipeline_schedules, class_name: 'Ci::PipelineSchedule' has_many :pipeline_schedules, class_name: 'Ci::PipelineSchedule'
has_many :project_deploy_tokens has_many :project_deploy_tokens
has_many :deploy_tokens, through: :project_deploy_tokens has_many :deploy_tokens, through: :project_deploy_tokens
......
# frozen_string_literal: true # frozen_string_literal: true
class UpdateDeploymentService class StartEnvironmentService
attr_reader :deployment attr_reader :deployment
attr_reader :deployable attr_reader :deployable
...@@ -13,6 +13,8 @@ class UpdateDeploymentService ...@@ -13,6 +13,8 @@ class UpdateDeploymentService
end end
def execute def execute
return unless deployment.deployed?
deployment.create_ref deployment.create_ref
deployment.invalidate_cache deployment.invalidate_cache
...@@ -20,10 +22,9 @@ class UpdateDeploymentService ...@@ -20,10 +22,9 @@ class UpdateDeploymentService
environment.external_url = expanded_environment_url if environment.external_url = expanded_environment_url if
expanded_environment_url expanded_environment_url
environment.fire_state_event(action) environment.fire_state_event(:start)
break unless environment.save break unless environment.save
break if environment.stopped?
deployment.tap(&:update_merge_request_metrics!) deployment.tap(&:update_merge_request_metrics!)
end end
...@@ -46,8 +47,4 @@ class UpdateDeploymentService ...@@ -46,8 +47,4 @@ class UpdateDeploymentService
def environment_url def environment_url
environment_options[:url] environment_options[:url]
end end
def action
environment_options[:action] || 'start'
end
end end
# frozen_string_literal: true
class StopEnvironmentService
attr_reader :deployment
delegate :environment, to: :deployment
def initialize(deployment)
@deployment = deployment
end
def execute
return unless deployment.stopped?
environment.fire_state_event(:stop)
environment.expire_etag_cache
end
end
...@@ -10,7 +10,6 @@ class BuildSuccessWorker ...@@ -10,7 +10,6 @@ class BuildSuccessWorker
def perform(build_id) def perform(build_id)
Ci::Build.find_by(id: build_id).try do |build| Ci::Build.find_by(id: build_id).try do |build|
create_deployment(build) if build.has_environment? create_deployment(build) if build.has_environment?
stop_environment(build) if build.stops_environment?
end end
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
...@@ -27,10 +26,4 @@ class BuildSuccessWorker ...@@ -27,10 +26,4 @@ class BuildSuccessWorker
deployment.succeed deployment.succeed
end end
end end
##
# TODO: This should be processed in DeploymentSuccessWorker once we started storing `action` value in `deployments` records
def stop_environment(build)
build.persisted_environment.fire_state_event(:stop)
end
end end
...@@ -8,9 +8,11 @@ module Deployments ...@@ -8,9 +8,11 @@ module Deployments
def perform(deployment_id) def perform(deployment_id)
Deployment.find_by_id(deployment_id).try do |deployment| Deployment.find_by_id(deployment_id).try do |deployment|
break unless deployment.success? if deployment.deployed?
StartEnvironmentService.new(deployment).execute
UpdateDeploymentService.new(deployment).execute elsif deployment.stopped?
StopEnvironmentService.new(deployment).execute
end
end end
end end
end end
......
---
title: Fix environment status in merge request widget
merge_request: 22799
author:
type: changed
...@@ -43,12 +43,14 @@ class Gitlab::Seeder::Pipelines ...@@ -43,12 +43,14 @@ class Gitlab::Seeder::Pipelines
# deploy stage # deploy stage
{ name: 'staging', stage: 'deploy', environment: 'staging', status_event: :success, { name: 'staging', stage: 'deploy', environment: 'staging', status_event: :success,
options: { environment: { action: 'start', on_stop: 'stop staging' } }, options: { environment: { name: 'staging', action: 'start', on_stop: 'stop staging' } },
queued_at: 7.hour.ago, started_at: 6.hour.ago, finished_at: 4.hour.ago }, queued_at: 7.hour.ago, started_at: 6.hour.ago, finished_at: 4.hour.ago },
{ name: 'stop staging', stage: 'deploy', environment: 'staging', { name: 'stop staging', stage: 'deploy', environment: 'staging',
when: 'manual', status: :skipped }, when: 'manual', status: :skipped,
options: { environment: { name: 'staging', action: 'stop' } } },
{ name: 'production', stage: 'deploy', environment: 'production', { name: 'production', stage: 'deploy', environment: 'production',
when: 'manual', status: :skipped }, when: 'manual', status: :skipped,
options: { environment: { name: 'production' } } },
# notify stage # notify stage
{ name: 'slack', stage: 'notify', when: 'manual', status: :success }, { name: 'slack', stage: 'notify', when: 'manual', status: :success },
......
...@@ -45,14 +45,18 @@ class Gitlab::Seeder::Environments ...@@ -45,14 +45,18 @@ class Gitlab::Seeder::Environments
end end
def create_deployment!(project, name, ref, sha) def create_deployment!(project, name, ref, sha)
environment = find_or_create_environment!(project, name) find_deployable(project, name).try do |deployable|
environment.deployments.create!( environment = find_or_create_environment!(project, name)
project: project, environment.deployments.create!(
ref: ref, project: project,
sha: sha, ref: ref,
tag: false, sha: sha,
deployable: find_deployable(project, name) tag: false,
) deployable: deployable
).tap do |deployment|
deployment.succeed!
end
end
end end
def find_or_create_environment!(project, name) def find_or_create_environment!(project, name)
......
# frozen_string_literal: true
class AddActionToDeployments < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DEPLOYMENT_ACTION_START = 1 # Equivalent to Deployment.actions['start']
DOWNTIME = false
disable_ddl_transaction!
def up
add_column_with_default(:deployments,
:action,
:integer,
limit: 2,
default: DEPLOYMENT_ACTION_START,
allow_null: false)
end
def down
remove_column(:deployments, :action)
end
end
# frozen_string_literal: true
class AddIndexToDeployments < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
def up
add_concurrent_index :deployments, [:project_id, :action, :status]
add_concurrent_index :deployments, [:environment_id, :action, :status]
add_concurrent_index :deployments, [:environment_id, :action, :sha]
add_concurrent_index :deployments, [:finished_at]
end
def down
remove_concurrent_index :deployments, [:project_id, :action, :status]
remove_concurrent_index :deployments, [:environment_id, :action, :status]
remove_concurrent_index :deployments, [:environment_id, :action, :sha]
remove_concurrent_index :deployments, [:finished_at]
end
end
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20181101144347) do ActiveRecord::Schema.define(version: 20181106135939) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
...@@ -827,14 +827,19 @@ ActiveRecord::Schema.define(version: 20181101144347) do ...@@ -827,14 +827,19 @@ ActiveRecord::Schema.define(version: 20181101144347) do
t.string "on_stop" t.string "on_stop"
t.integer "status", limit: 2, default: 2, null: false t.integer "status", limit: 2, default: 2, null: false
t.datetime_with_timezone "finished_at" t.datetime_with_timezone "finished_at"
t.integer "action", limit: 2, default: 1, null: false
end end
add_index "deployments", ["created_at"], name: "index_deployments_on_created_at", using: :btree add_index "deployments", ["created_at"], name: "index_deployments_on_created_at", using: :btree
add_index "deployments", ["deployable_type", "deployable_id"], name: "index_deployments_on_deployable_type_and_deployable_id", using: :btree add_index "deployments", ["deployable_type", "deployable_id"], name: "index_deployments_on_deployable_type_and_deployable_id", using: :btree
add_index "deployments", ["environment_id", "action", "sha"], name: "index_deployments_on_environment_id_and_action_and_sha", using: :btree
add_index "deployments", ["environment_id", "action", "status"], name: "index_deployments_on_environment_id_and_action_and_status", using: :btree
add_index "deployments", ["environment_id", "id"], name: "index_deployments_on_environment_id_and_id", using: :btree add_index "deployments", ["environment_id", "id"], name: "index_deployments_on_environment_id_and_id", using: :btree
add_index "deployments", ["environment_id", "iid", "project_id"], name: "index_deployments_on_environment_id_and_iid_and_project_id", using: :btree add_index "deployments", ["environment_id", "iid", "project_id"], name: "index_deployments_on_environment_id_and_iid_and_project_id", using: :btree
add_index "deployments", ["environment_id", "status"], name: "index_deployments_on_environment_id_and_status", using: :btree add_index "deployments", ["environment_id", "status"], name: "index_deployments_on_environment_id_and_status", using: :btree
add_index "deployments", ["finished_at"], name: "index_deployments_on_finished_at", using: :btree
add_index "deployments", ["id"], name: "partial_index_deployments_for_legacy_successful_deployments", where: "((finished_at IS NULL) AND (status = 2))", using: :btree add_index "deployments", ["id"], name: "partial_index_deployments_for_legacy_successful_deployments", where: "((finished_at IS NULL) AND (status = 2))", using: :btree
add_index "deployments", ["project_id", "action", "status"], name: "index_deployments_on_project_id_and_action_and_status", using: :btree
add_index "deployments", ["project_id", "iid"], name: "index_deployments_on_project_id_and_iid", unique: true, using: :btree add_index "deployments", ["project_id", "iid"], name: "index_deployments_on_project_id_and_iid", unique: true, using: :btree
add_index "deployments", ["project_id", "status"], name: "index_deployments_on_project_id_and_status", using: :btree add_index "deployments", ["project_id", "status"], name: "index_deployments_on_project_id_and_status", using: :btree
......
...@@ -24,7 +24,7 @@ module API ...@@ -24,7 +24,7 @@ module API
get ':id/deployments' do get ':id/deployments' do
authorize! :read_deployment, user_project authorize! :read_deployment, user_project
present paginate(user_project.deployments.order(params[:order_by] => params[:sort])), with: Entities::Deployment present paginate(user_project.deployments.deployed.order(params[:order_by] => params[:sort])), with: Entities::Deployment
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
...@@ -38,7 +38,7 @@ module API ...@@ -38,7 +38,7 @@ module API
get ':id/deployments/:deployment_id' do get ':id/deployments/:deployment_id' do
authorize! :read_deployment, user_project authorize! :read_deployment, user_project
deployment = user_project.deployments.find(params[:deployment_id]) deployment = user_project.deployments.deployed.find(params[:deployment_id])
present deployment, with: Entities::Deployment present deployment, with: Entities::Deployment
end end
......
...@@ -7,7 +7,7 @@ module Gitlab ...@@ -7,7 +7,7 @@ module Gitlab
end end
def value def value
@value ||= @project.deployments.where("created_at > ?", @from).count @value ||= @project.deployments.deployed.where("finished_at > ?", @from).count
end end
end end
end end
......
...@@ -47,5 +47,13 @@ FactoryBot.define do ...@@ -47,5 +47,13 @@ FactoryBot.define do
deployment.succeed! deployment.succeed!
end end
end end
trait :start do
action :start
end
trait :stop do
action :stop
end
end end
end end
require 'rails_helper' require 'rails_helper'
describe 'Merge request > User sees deployment widget', :js do describe 'Merge request > User sees deployment widget', :js do
describe 'when deployed to an environment' do describe 'when merge request has associated environments' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let(:merge_request) { create(:merge_request, :merged, source_project: project) } let(:merge_request) { create(:merge_request, :merged, source_project: project) }
...@@ -10,30 +10,126 @@ describe 'Merge request > User sees deployment widget', :js do ...@@ -10,30 +10,126 @@ describe 'Merge request > User sees deployment widget', :js do
let(:ref) { merge_request.target_branch } let(:ref) { merge_request.target_branch }
let(:sha) { project.commit(ref).id } let(:sha) { project.commit(ref).id }
let(:pipeline) { create(:ci_pipeline_without_jobs, sha: sha, project: project, ref: ref) } let(:pipeline) { create(:ci_pipeline_without_jobs, sha: sha, project: project, ref: ref) }
let(:build) { create(:ci_build, :success, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :succeed, environment: environment, sha: sha, ref: ref, deployable: build) }
let!(:manual) { } let!(:manual) { }
before do before do
merge_request.update!(merge_commit_sha: sha) merge_request.update!(merge_commit_sha: sha)
project.add_user(user, role) project.add_user(user, role)
sign_in(user) sign_in(user)
visit project_merge_request_path(project, merge_request)
wait_for_requests
end end
it 'displays that the environment is deployed' do context 'when deployment is to start an environment' do
wait_for_requests context 'when deployment succeeded' do
let(:build) { create(:ci_build, :success, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :succeed, environment: environment, sha: sha, ref: ref, deployable: build) }
expect(page).to have_content("Deployed to #{environment.name}") it 'displays that the environment is deployed' do
expect(find('.js-deploy-time')['data-original-title']).to eq(deployment.created_at.to_time.in_time_zone.to_s(:medium)) visit project_merge_request_path(project, merge_request)
wait_for_requests
expect(page).to have_content("Deployed to #{environment.name}")
expect(find('.js-deploy-time')['data-original-title']).to eq(deployment.created_at.to_time.in_time_zone.to_s(:medium))
end
end
context 'when deployment failed' do
let(:build) { create(:ci_build, :failed, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :failed, environment: environment, sha: sha, ref: ref, deployable: build) }
it 'displays that the deployment failed' do
visit project_merge_request_path(project, merge_request)
wait_for_requests
expect(page).to have_content("Failed to deploy to #{environment.name}")
expect(page).not_to have_css('.js-deploy-time')
end
end
context 'when deployment running' do
let(:build) { create(:ci_build, :running, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :running, environment: environment, sha: sha, ref: ref, deployable: build) }
it 'displays that the running deployment' do
visit project_merge_request_path(project, merge_request)
wait_for_requests
expect(page).to have_content("Deploying to #{environment.name}")
expect(page).not_to have_css('.js-deploy-time')
end
end
context 'when deployment will happen' do
let(:build) { create(:ci_build, :created, pipeline: pipeline) }
let!(:deployment) { create(:deployment, environment: environment, sha: sha, ref: ref, deployable: build) }
it 'displays that the environment name' do
visit project_merge_request_path(project, merge_request)
wait_for_requests
expect(page).to have_content("Deploying to #{environment.name}")
expect(page).not_to have_css('.js-deploy-time')
end
end
end
context 'when deployment is to stop an environment' do
context 'when the stop action succeeded' do
let(:build) { create(:ci_build, :success, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :succeed, :stop, environment: environment, sha: sha, ref: ref, deployable: build) }
it 'does not display deployment info' do
visit project_merge_request_path(project, merge_request)
wait_for_requests
expect(page).not_to have_css('.deployment-info')
end
end
context 'when the stop action failed' do
let(:build) { create(:ci_build, :failed, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :failed, :stop, environment: environment, sha: sha, ref: ref, deployable: build) }
it 'does not display deployment info' do
visit project_merge_request_path(project, merge_request)
wait_for_requests
expect(page).not_to have_css('.deployment-info')
end
end
context 'when the stop action is running' do
let(:build) { create(:ci_build, :running, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :running, :stop, environment: environment, sha: sha, ref: ref, deployable: build) }
it 'does not display deployment info' do
visit project_merge_request_path(project, merge_request)
wait_for_requests
expect(page).not_to have_css('.deployment-info')
end
end
context 'when the stop action will happen' do
let(:build) { create(:ci_build, :created, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :stop, environment: environment, sha: sha, ref: ref, deployable: build) }
it 'does not display deployment info' do
visit project_merge_request_path(project, merge_request)
wait_for_requests
expect(page).not_to have_css('.deployment-info')
end
end
end end
context 'with stop action' do context 'with stop action' do
let(:build) { create(:ci_build, :success, pipeline: pipeline) }
let!(:deployment) { create(:deployment, :succeed, environment: environment, sha: sha, ref: ref, deployable: build) }
let(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'close_app') } let(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'close_app') }
before do before do
deployment.update!(on_stop: manual.name) deployment.update!(on_stop: manual.name)
visit project_merge_request_path(project, merge_request)
wait_for_requests wait_for_requests
end end
......
...@@ -43,6 +43,58 @@ describe 'Environment' do ...@@ -43,6 +43,58 @@ describe 'Environment' do
end end
end end
context 'when there is a successful deployment' do
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, :success, pipeline: pipeline) }
let(:deployment) do
create(:deployment, :success, environment: environment, deployable: build)
end
it 'does show deployments' do
expect(page).to have_link("#{build.name} (##{build.id})")
end
end
context 'when there is a running deployment' do
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, pipeline: pipeline) }
let(:deployment) do
create(:deployment, :running, environment: environment, deployable: build)
end
it 'does show no deployments' do
expect(page).to have_content('You don\'t have any deployments right now.')
end
end
context 'when there is a failed deployment' do
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, pipeline: pipeline) }
let(:deployment) do
create(:deployment, :failed, environment: environment, deployable: build)
end
it 'does show no deployments' do
expect(page).to have_content('You don\'t have any deployments right now.')
end
end
context 'when there is a successful stop action' do
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, :success, pipeline: pipeline) }
let(:deployment) do
create(:deployment, :success, :stop, environment: environment, deployable: build)
end
it 'does show no deployments' do
expect(page).to have_content('You don\'t have any deployments right now.')
end
end
context 'with related deployable present' do context 'with related deployable present' do
let(:pipeline) { create(:ci_pipeline, project: project) } let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, pipeline: pipeline) } let(:build) { create(:ci_build, pipeline: pipeline) }
......
...@@ -128,7 +128,7 @@ describe 'Environments page', :js do ...@@ -128,7 +128,7 @@ describe 'Environments page', :js do
end end
end end
context 'when there are deployments' do context 'when there are successful deployments' do
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let!(:deployment) do let!(:deployment) do
...@@ -328,6 +328,39 @@ describe 'Environments page', :js do ...@@ -328,6 +328,39 @@ describe 'Environments page', :js do
end end
end end
end end
context 'when there is a failed deployment' do
let(:project) { create(:project, :repository) }
let!(:deployment) do
create(:deployment, :failed,
environment: environment,
sha: project.commit.id)
end
it 'does not show deployments' do
visit_environments(project)
expect(page).to have_content('No deployments yet')
end
end
context 'when there is a successful stop action' do
let(:project) { create(:project, :repository) }
let!(:deployment) do
create(:deployment, :success,
:stop,
environment: environment,
sha: project.commit.id)
end
it 'does not show deployments' do
visit_environments(project)
expect(page).to have_content('No deployments yet')
end
end
end end
it 'does have a new environment button' do it 'does have a new environment button' do
......
...@@ -22,13 +22,17 @@ describe Deployable do ...@@ -22,13 +22,17 @@ describe Deployable do
expect(deployment.on_stop).to eq('stop_review_app') expect(deployment.on_stop).to eq('stop_review_app')
expect(environment.name).to eq('review/master') expect(environment.name).to eq('review/master')
end end
it 'updates action column to start' do
expect(deployment).to be_start
end
end end
context 'when the deployable object will stop an environment' do context 'when the deployable object will stop the review app' do
let!(:job) { create(:ci_build, :stop_review_app) } let!(:job) { create(:ci_build, :stop_review_app) }
it 'does not create a deployment record' do it 'updates action column to stop' do
expect(deployment).to be_nil expect(deployment).to be_stop
end end
end end
......
...@@ -191,6 +191,150 @@ describe Deployment do ...@@ -191,6 +191,150 @@ describe Deployment do
end end
end end
describe '.deployed' do
subject { described_class.deployed }
context 'when deployment starts an environment' do
context 'when the action was successful' do
let!(:deployment) { create(:deployment, :start, :success) }
it 'returns the deployment' do
is_expected.to eq([deployment])
end
end
context 'when the action failed' do
let!(:deployment) { create(:deployment, :start, :failed) }
it 'returns nothing' do
is_expected.to be_empty
end
end
end
context 'when deployment stops an environment' do
context 'when the action was successful' do
let!(:deployment) { create(:deployment, :stop, :success) }
it 'returns nothing' do
is_expected.to be_empty
end
end
context 'when the action failed' do
let!(:deployment) { create(:deployment, :stop, :failed) }
it 'returns nothing' do
is_expected.to be_empty
end
end
end
end
describe '.stopped' do
subject { described_class.stopped }
context 'when deployment starts an environment' do
context 'when the action was successful' do
let!(:deployment) { create(:deployment, :start, :success) }
it 'returns nothing' do
is_expected.to be_empty
end
end
context 'when the action failed' do
let!(:deployment) { create(:deployment, :start, :failed) }
it 'returns nothing' do
is_expected.to be_empty
end
end
end
context 'when deployment stops an environment' do
context 'when the action was successful' do
let!(:deployment) { create(:deployment, :stop, :success) }
it 'returns the deployment' do
is_expected.to eq([deployment])
end
end
context 'when the action failed' do
let!(:deployment) { create(:deployment, :stop, :failed) }
it 'returns nothing' do
is_expected.to be_empty
end
end
end
end
describe '#deployed?' do
subject { deployment.deployed? }
context 'when deployment starts an environment' do
context 'when the action was successful' do
let!(:deployment) { create(:deployment, :start, :success) }
it { is_expected.to be_truthy }
end
context 'when the action failed' do
let!(:deployment) { create(:deployment, :start, :failed) }
it { is_expected.to be_falsy }
end
end
context 'when deployment stops an environment' do
context 'when the action was successful' do
let!(:deployment) { create(:deployment, :stop, :success) }
it { is_expected.to be_falsy }
end
context 'when the action failed' do
let!(:deployment) { create(:deployment, :stop, :failed) }
it { is_expected.to be_falsy }
end
end
end
describe '#stopped?' do
subject { deployment.stopped? }
context 'when deployment starts an environment' do
context 'when the action was successful' do
let!(:deployment) { create(:deployment, :start, :success) }
it { is_expected.to be_falsy }
end
context 'when the action failed' do
let!(:deployment) { create(:deployment, :start, :failed) }
it { is_expected.to be_falsy }
end
end
context 'when deployment stops an environment' do
context 'when the action was successful' do
let!(:deployment) { create(:deployment, :stop, :success) }
it { is_expected.to be_truthy }
end
context 'when the action failed' do
let!(:deployment) { create(:deployment, :stop, :failed) }
it { is_expected.to be_falsy }
end
end
end
describe '#deployed_at' do describe '#deployed_at' do
subject { deployment.deployed_at } subject { deployment.deployed_at }
......
...@@ -53,6 +53,65 @@ describe Environment do ...@@ -53,6 +53,65 @@ describe Environment do
end end
end end
describe '.with_deployment' do
subject { described_class.with_deployment(sha) }
let(:environment) { create(:environment) }
let(:sha) { RepoHelpers.sample_commit.id }
context 'when deployment starts environment' do
context 'when deployment has the specified sha' do
let!(:deployment) { create(:deployment, :start, environment: environment, sha: sha) }
it { is_expected.to eq([environment]) }
end
context 'when deployment does not have the specified sha' do
let!(:deployment) { create(:deployment, :start, environment: environment, sha: 'abc') }
it { is_expected.to be_empty }
end
end
context 'when deployment stops environment' do
let!(:deployment) { create(:deployment, :stop, environment: environment) }
it { is_expected.to be_empty }
end
end
describe '#last_deployed_at' do
subject { environment.last_deployed_at }
let(:environment) { create(:environment) }
context 'when the latest deployment is for starting an environment' do
context 'when the latest deployment is successful' do
let!(:deployment) { create(:deployment, :start, :success, environment: environment) }
it { expect(subject.to_i).to eq(deployment.finished_at.to_i) }
end
context 'when the latest deployment failed' do
let!(:deployment) { create(:deployment, :start, :failed, environment: environment) }
it { is_expected.to be_nil }
end
context 'when the latest deployment is running' do
let!(:deployment) { create(:deployment, :start, :running, environment: environment) }
it { is_expected.to be_nil }
end
end
context 'when the latest deployment is for stopping environment' do
let!(:deployment) { create(:deployment, :stop, :success, environment: environment) }
it { is_expected.to be_nil }
end
end
describe '#folder_name' do describe '#folder_name' do
context 'when it is inside a folder' do context 'when it is inside a folder' do
subject(:environment) do subject(:environment) do
...@@ -134,26 +193,6 @@ describe Environment do ...@@ -134,26 +193,6 @@ describe Environment do
end end
end end
describe '#first_deployment_for' do
let(:project) { create(:project, :repository) }
let!(:deployment) { create(:deployment, :succeed, environment: environment, ref: commit.parent.id) }
let!(:deployment1) { create(:deployment, :succeed, environment: environment, ref: commit.id) }
let(:head_commit) { project.commit }
let(:commit) { project.commit.parent }
it 'returns deployment id for the environment' do
expect(environment.first_deployment_for(commit.id)).to eq deployment1
end
it 'return nil when no deployment is found' do
expect(environment.first_deployment_for(head_commit.id)).to eq nil
end
it 'returns a UTF-8 ref' do
expect(environment.first_deployment_for(commit.id).ref).to be_utf8
end
end
describe '#environment_type' do describe '#environment_type' do
subject { environment.environment_type } subject { environment.environment_type }
......
require 'spec_helper' require 'spec_helper'
describe EnvironmentStatus do describe EnvironmentStatus do
let(:deployment) { create(:deployment, :succeed, :review_app) } include ProjectForksHelper
let(:environment) { deployment.environment}
let(:deployment) { create(:deployment, :succeed, :start, :review_app) }
let(:environment) { deployment.environment }
let(:project) { deployment.project } let(:project) { deployment.project }
let(:merge_request) { create(:merge_request, :deployed_review_app, deployment: deployment) } let(:merge_request) { create(:merge_request, :deployed_review_app, deployment: deployment) }
let(:sha) { deployment.sha } let(:sha) { deployment.sha }
...@@ -65,9 +67,9 @@ describe EnvironmentStatus do ...@@ -65,9 +67,9 @@ describe EnvironmentStatus do
let(:admin) { create(:admin) } let(:admin) { create(:admin) }
let(:pipeline) { create(:ci_pipeline, sha: sha) } let(:pipeline) { create(:ci_pipeline, sha: sha) }
it 'is based on merge_request.head_pipeline' do it 'is based on merge_request.diff_head_sha' do
expect(merge_request).to receive(:head_pipeline).and_return(pipeline) expect(merge_request).to receive(:diff_head_sha)
expect(merge_request).not_to receive(:merge_pipeline) expect(merge_request).not_to receive(:merge_commit_sha)
described_class.for_merge_request(merge_request, admin) described_class.for_merge_request(merge_request, admin)
end end
...@@ -81,11 +83,74 @@ describe EnvironmentStatus do ...@@ -81,11 +83,74 @@ describe EnvironmentStatus do
merge_request.mark_as_merged! merge_request.mark_as_merged!
end end
it 'is based on merge_request.merge_pipeline' do it 'is based on merge_request.merge_commit_sha' do
expect(merge_request).to receive(:merge_pipeline).and_return(pipeline) expect(merge_request).to receive(:merge_commit_sha)
expect(merge_request).not_to receive(:head_pipeline) expect(merge_request).not_to receive(:diff_head_sha)
described_class.after_merge_request(merge_request, admin) described_class.after_merge_request(merge_request, admin)
end end
end end
describe '.build_environments_status' do
subject { described_class.send(:build_environments_status, merge_request, user, sha) }
let!(:build) { create(:ci_build, :deploy_to_production, pipeline: pipeline) }
let(:environment) { build.deployment.environment }
let(:user) { project.owner }
before do
build.deployment.update(sha: sha)
end
context 'when environment is created on a forked project' do
let(:project) { create(:project, :repository) }
let(:forked) { fork_project(project, user, repository: true) }
let(:sha) { forked.commit.sha }
let(:pipeline) { create(:ci_pipeline, sha: sha, project: forked) }
let(:merge_request) do
create(:merge_request, source_project: forked, target_project: project, target_branch: 'master', head_pipeline: pipeline)
end
it 'returns environment status' do
expect(subject.count).to eq(1)
expect(subject[0].environment).to eq(environment)
expect(subject[0].merge_request).to eq(merge_request)
expect(subject[0].sha).to eq(sha)
end
end
context 'when environment is created on a target project' do
let(:project) { create(:project, :repository) }
let(:sha) { project.commit.sha }
let(:pipeline) { create(:ci_pipeline, sha: sha, project: project) }
let(:merge_request) do
create(:merge_request, source_project: project, source_branch: 'feature', target_project: project, target_branch: 'master', head_pipeline: pipeline)
end
it 'returns environment status' do
expect(subject.count).to eq(1)
expect(subject[0].environment).to eq(environment)
expect(subject[0].merge_request).to eq(merge_request)
expect(subject[0].sha).to eq(sha)
end
context 'when the build stops an environment' do
let!(:build) { create(:ci_build, :stop_review_app, pipeline: pipeline) }
it 'does not return environment status' do
expect(subject.count).to eq(0)
end
end
context 'when user does not have a permission to see the environment' do
let(:user) { create(:user) }
it 'does not return environment status' do
expect(subject.count).to eq(0)
end
end
end
end
end end
...@@ -15,6 +15,7 @@ describe EnvironmentStatusEntity do ...@@ -15,6 +15,7 @@ describe EnvironmentStatusEntity do
subject { entity.as_json } subject { entity.as_json }
before do before do
deployment.update(sha: merge_request.diff_head_sha)
allow(request).to receive(:current_user).and_return(user) allow(request).to receive(:current_user).and_return(user)
end end
......
require 'spec_helper' require 'spec_helper'
describe UpdateDeploymentService do describe StartEnvironmentService do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:options) { { name: 'production' } } let(:options) { { name: 'production' } }
...@@ -84,8 +84,8 @@ describe UpdateDeploymentService do ...@@ -84,8 +84,8 @@ describe UpdateDeploymentService do
it 'updates external url' do it 'updates external url' do
subject subject
expect(subject.environment.name).to eq('review-apps/master') expect(environment.reload.name).to eq('review-apps/master')
expect(subject.environment.external_url).to eq('http://master.review-apps.gitlab.com') expect(environment.reload.external_url).to eq('http://master.review-apps.gitlab.com')
end end
end end
end end
......
require 'spec_helper'
describe StopEnvironmentService do
let(:service) { described_class.new(deployment) }
describe '#execute' do
subject { service.execute }
context 'when environment is available' do
let(:environment) { create(:environment, state: :available) }
context 'when deployment was successful' do
let(:deployment) { create(:deployment, :success, :stop, environment: environment) }
it 'stops the environment' do
subject
expect(environment.reload).to be_stopped
end
end
context 'when deployment failed' do
let(:deployment) { create(:deployment, :failed, :stop, environment: environment) }
it 'does not stop the environment' do
subject
expect(environment.reload).to be_available
end
end
end
context 'when environment is stopped' do
let(:deployment) { create(:deployment, :success, :stop, environment: environment) }
let(:environment) { create(:environment, state: :stopped) }
it 'does not raise an error' do
expect { subject }.not_to raise_error
expect(environment.reload).to be_stopped
end
end
end
end
...@@ -47,19 +47,6 @@ describe BuildSuccessWorker do ...@@ -47,19 +47,6 @@ describe BuildSuccessWorker do
expect(build.reload).not_to be_has_deployment expect(build.reload).not_to be_has_deployment
end end
end end
context 'when the build will stop an environment' do
let!(:build) { create(:ci_build, :stop_review_app, environment: environment.name, project: environment.project) }
let(:environment) { create(:environment, state: :available) }
it 'stops the environment' do
expect(environment).to be_available
subject
expect(environment.reload).to be_stopped
end
end
end end
context 'when build does not exist' do context 'when build does not exist' do
......
...@@ -3,34 +3,51 @@ require 'spec_helper' ...@@ -3,34 +3,51 @@ require 'spec_helper'
describe Deployments::SuccessWorker do describe Deployments::SuccessWorker do
subject { described_class.new.perform(deployment&.id) } subject { described_class.new.perform(deployment&.id) }
context 'when successful deployment' do context 'when deployment starts environment' do
let(:deployment) { create(:deployment, :success) } context 'when deployment was successful' do
let(:deployment) { create(:deployment, :start, :success) }
it 'executes UpdateDeploymentService' do it 'executes StartEnvironmentService' do
expect(UpdateDeploymentService) expect(StartEnvironmentService)
.to receive(:new).with(deployment).and_call_original .to receive(:new).with(deployment).and_call_original
subject subject
end
end end
end
context 'when canceled deployment' do context 'when deployment failed' do
let(:deployment) { create(:deployment, :canceled) } let(:deployment) { create(:deployment, :start, :failed) }
it 'does not execute UpdateDeploymentService' do it 'does not execute StartEnvironmentService' do
expect(UpdateDeploymentService).not_to receive(:new) expect(StartEnvironmentService)
.not_to receive(:new).with(deployment).and_call_original
subject subject
end
end end
end end
context 'when deploy record does not exist' do context 'when deployment stops environment' do
let(:deployment) { nil } context 'when deployment was successful' do
let(:deployment) { create(:deployment, :stop, :success) }
it 'executes StopEnvironmentService' do
expect(StopEnvironmentService)
.to receive(:new).with(deployment).and_call_original
subject
end
end
context 'when deployment failed' do
let(:deployment) { create(:deployment, :stop, :failed) }
it 'does not execute UpdateDeploymentService' do it 'does not execute StopEnvironmentService' do
expect(UpdateDeploymentService).not_to receive(:new) expect(StopEnvironmentService)
.not_to receive(:new).with(deployment).and_call_original
subject subject
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment