shipitron 1.3.2 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ffcd046204b230e7282508063bb33a58c1c68e73c4e7c8546ea15cfc48d6a2f7
4
- data.tar.gz: 38ddb0adc7677e27c9afcee285d09358afb60df254994d456319bf904d518091
3
+ metadata.gz: ce2ad45258aa11acc35b0c3041aab0fe3f20bb56f076764120f1b6466233f310
4
+ data.tar.gz: 938b06da85c43614c316c7d63a755440e8d7d61e6396ee0bc574040fda9bd817
5
5
  SHA512:
6
- metadata.gz: 28b568e8e1a5fa928beeeaf2ff1e00415671712c9415dacc317581d10d79bb320bbc05f07d9d1c7b528db4a5523f9568cb9dac33d2bc5607165b43d1896d3cc4
7
- data.tar.gz: fcd1597703388b9bf8be61ab98e03faabbcf17bab98a06895344e14cb41f3ee412941fe2a27257425c3db646762130500e592150c53e35520939d04240f77fe6
6
+ metadata.gz: 5a93f308e3065ada355022a5a18977d903e00ae56387e98218bf26557101ca8ccbb1a2d7c1950c6c2849b0bc47da860a57dccb6d0365216df99670a90245ce2c
7
+ data.tar.gz: 2a041845cb6bc87c29366de8e39702fb691bec9efb7a2e53df8673d30bbd9988edaa3147fe68a98c09fe6be80b81aa8a3094ded4fef464df23622c421ea63017
@@ -0,0 +1,94 @@
1
+ env:
2
+ BUILDKITE_PLUGIN_DOCKER_CACHE_S3_BUCKET: "outstand-buildkite-cache"
3
+ # BUILDKITE_PLUGIN_DOCKER_CACHE_VOLUME_DEBUG: "true"
4
+ BUILDKITE_PLUGIN_DOCKER_COMPOSE_SHELL: "false"
5
+ # BUILDKITE_PLUGIN_DOCKER_COMPOSE_UPLOAD_CONTAINER_LOGS: "always"
6
+ BUILDKITE_PLUGIN_DOCKER_COMPOSE_PULL_RETRIES: 5
7
+ BUILDKITE_PLUGIN_DOCKER_COMPOSE_PUSH_RETRIES: 5
8
+ PLUGIN_DOCKER_COMPOSE_VERSION: "17bac3aaee1360e39381b89bb45513b11838238e"
9
+ PLUGIN_DOCKER_CACHE_VERSION: "f3d8feb52a25c69c75565e9f0b80375eae51850a"
10
+
11
+ steps:
12
+ - label: ":docker: Build"
13
+ key: build
14
+ plugins:
15
+ - seek-oss/aws-sm#v2.2.1:
16
+ env:
17
+ DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
18
+
19
+ - docker-login#v2.0.1:
20
+ username: outstandci
21
+
22
+ - ecr#v2.1.1:
23
+ login: true
24
+ region: "us-east-1"
25
+
26
+ - https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
27
+ build: specs
28
+ image-repository: 786715713882.dkr.ecr.us-east-1.amazonaws.com/ci-images
29
+ config:
30
+ - docker-compose.yml
31
+ - test.yml
32
+
33
+ - label: ":bundler: :rubygems:"
34
+ key: bundle_install
35
+ command: bundle install
36
+ depends_on: build
37
+ plugins:
38
+ - seek-oss/aws-sm#v2.2.1:
39
+ env:
40
+ DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
41
+
42
+ - docker-login#v2.0.1:
43
+ username: outstandci
44
+
45
+ - ecr#v2.1.1:
46
+ login: true
47
+ region: "us-east-1"
48
+
49
+ - https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
50
+ run: specs
51
+ dependencies: false
52
+ config:
53
+ - docker-compose.yml
54
+ - test.yml
55
+
56
+ - https://github.com/outstand/docker-cache-buildkite-plugin.git#${PLUGIN_DOCKER_CACHE_VERSION}:
57
+ name: bundler-cache
58
+ keys:
59
+ - v1-bundler-cache-{{ arch }}-{{ checksum "shipitron.gemspec" }}-{{ checksum "Gemfile" }}
60
+ - v1-bundler-cache-{{ arch }}-
61
+ save: true
62
+ volumes:
63
+ - bundler-data
64
+
65
+ - label: ":ruby: Specs"
66
+ command: rspec spec
67
+ depends_on: bundle_install
68
+ plugins:
69
+ - seek-oss/aws-sm#v2.2.1:
70
+ env:
71
+ DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
72
+ json-to-env:
73
+ - secret-id: "/buildkite/rails/env_vars"
74
+
75
+ - docker-login#v2.0.1:
76
+ username: outstandci
77
+
78
+ - ecr#v2.1.1:
79
+ login: true
80
+ region: "us-east-1"
81
+
82
+ - https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
83
+ run: specs
84
+ config:
85
+ - docker-compose.yml
86
+ - test.yml
87
+
88
+ - https://github.com/outstand/docker-cache-buildkite-plugin.git#${PLUGIN_DOCKER_CACHE_VERSION}:
89
+ name: bundler-cache
90
+ keys:
91
+ - v1-bundler-cache-{{ arch }}-{{ checksum "shipitron.gemspec" }}-{{ checksum "Gemfile" }}
92
+ - v1-bundler-cache-{{ arch }}-
93
+ volumes:
94
+ - bundler-data
data/.rspec CHANGED
@@ -1,3 +1,4 @@
1
1
  --color
2
2
  --require spec_helper
3
3
  --format Fivemat
4
+ --format RSpec::Buildkite::AnnotationFormatter
data/Deskfile ADDED
@@ -0,0 +1,15 @@
1
+ function bundle() {
2
+ dev run --rm shipitron bundle "$@"
3
+ }
4
+
5
+ function shipitron() {
6
+ dev run --rm shipitron "$@"
7
+ }
8
+
9
+ function rspec() {
10
+ dev run --rm specs rspec "$@"
11
+ }
12
+
13
+ function release_gem() {
14
+ dev run --rm release_gem
15
+ }
data/Dockerfile CHANGED
@@ -1,11 +1,6 @@
1
- FROM ruby:2.7.2-alpine as cache
2
- COPY cache/ /tmp/
3
- RUN cd /usr/local/bundle && \
4
- ([ -f /tmp/bundler-data.tar.gz ] && \
5
- tar -zxf /tmp/bundler-data.tar.gz && \
6
- rm /tmp/bundler-data.tar.gz) || true
1
+ FROM outstand/fixuid as fixuid
7
2
 
8
- FROM ruby:2.7.2-alpine
3
+ FROM ruby:2.7.3-alpine
9
4
  LABEL maintainer="Ryan Schlesinger <ryan@outstand.com>"
10
5
 
11
6
  RUN addgroup -S shipitron && \
@@ -29,12 +24,19 @@ RUN apk add --no-cache \
29
24
  jq \
30
25
  cmake
31
26
 
32
- ENV ECR_CREDENTIAL_HELPER_VERSION 0.4.0
27
+ COPY --from=fixuid /usr/local/bin/fixuid /usr/local/bin/fixuid
28
+ RUN chmod 4755 /usr/local/bin/fixuid && \
29
+ USER=shipitron && \
30
+ GROUP=shipitron && \
31
+ mkdir -p /etc/fixuid && \
32
+ printf "user: $USER\ngroup: $GROUP\n" > /etc/fixuid/config.yml
33
+
34
+ ENV ECR_CREDENTIAL_HELPER_VERSION 0.5.0
33
35
  RUN cd /usr/local/bin && \
34
36
  wget https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/${ECR_CREDENTIAL_HELPER_VERSION}/linux-amd64/docker-credential-ecr-login && \
35
37
  chmod +x docker-credential-ecr-login
36
38
 
37
- ENV BUILDKIT_VERSION v0.7.2
39
+ ENV BUILDKIT_VERSION v0.8.3
38
40
  RUN cd /usr/local/bin && \
39
41
  wget -nv https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}/buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz && \
40
42
  tar --strip-components=1 -zxvf buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz bin/buildctl && \
@@ -42,7 +44,7 @@ RUN cd /usr/local/bin && \
42
44
  rm -f buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz
43
45
 
44
46
  USER shipitron
45
- ENV BUILDX_VERSION v0.4.2
47
+ ENV BUILDX_VERSION v0.5.1
46
48
  RUN cd /home/shipitron && \
47
49
  wget -nv https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64 && \
48
50
  mkdir -p ~/.docker/cli-plugins && \
@@ -53,16 +55,16 @@ USER root
53
55
  ENV USE_BUNDLE_EXEC true
54
56
  ENV BUNDLE_GEMFILE /shipitron/Gemfile
55
57
 
58
+ ENV BUNDLER_VERSION 2.2.21
59
+ RUN gem install bundler -v ${BUNDLER_VERSION} -i /usr/local/lib/ruby/gems/$(ls /usr/local/lib/ruby/gems) --force
60
+
56
61
  WORKDIR /app
57
62
  COPY Gemfile shipitron.gemspec /shipitron/
58
63
  COPY lib/shipitron/version.rb /shipitron/lib/shipitron/
59
64
 
60
- COPY --from=cache /usr/local/bundle /usr/local/bundle
61
- RUN (bundle check || bundle install) && \
62
- git config --global push.default simple
65
+ RUN git config --global push.default simple
63
66
  COPY . /shipitron/
64
- RUN ln -s /shipitron/exe/shipitron /usr/local/bin/shipitron && \
65
- mkdir -p /home/shipitron/.ssh && \
67
+ RUN mkdir -p /home/shipitron/.ssh && \
66
68
  chown shipitron:shipitron /home/shipitron/.ssh && \
67
69
  chmod 700 /home/shipitron/.ssh
68
70
 
data/Dockerfile.release CHANGED
@@ -1,4 +1,4 @@
1
- FROM ruby:2.7.2-alpine
1
+ FROM ruby:2.7.3-alpine
2
2
  LABEL maintainer="Ryan Schlesinger <ryan@outstand.com>"
3
3
 
4
4
  RUN addgroup -S shipitron && \
@@ -21,12 +21,12 @@ RUN apk add --no-cache \
21
21
  jq \
22
22
  cmake
23
23
 
24
- ENV ECR_CREDENTIAL_HELPER_VERSION 0.4.0
24
+ ENV ECR_CREDENTIAL_HELPER_VERSION 0.5.0
25
25
  RUN cd /usr/local/bin && \
26
26
  wget https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/${ECR_CREDENTIAL_HELPER_VERSION}/linux-amd64/docker-credential-ecr-login && \
27
27
  chmod +x docker-credential-ecr-login
28
28
 
29
- ENV BUILDKIT_VERSION v0.7.2
29
+ ENV BUILDKIT_VERSION v0.8.3
30
30
  RUN cd /usr/local/bin && \
31
31
  wget -nv https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}/buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz && \
32
32
  tar --strip-components=1 -zxvf buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz bin/buildctl && \
@@ -34,7 +34,7 @@ RUN cd /usr/local/bin && \
34
34
  rm -f buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz
35
35
 
36
36
  USER shipitron
37
- ENV BUILDX_VERSION v0.4.2
37
+ ENV BUILDX_VERSION v0.5.1
38
38
  RUN cd /home/shipitron && \
39
39
  wget -nv https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64 && \
40
40
  mkdir -p ~/.docker/cli-plugins && \
@@ -45,14 +45,14 @@ USER root
45
45
 
46
46
  WORKDIR /app
47
47
 
48
- ENV SHIPITRON_VERSION=1.3.2
48
+ ENV SHIPITRON_VERSION=1.4.0
49
49
 
50
50
  RUN gem install shipitron -v ${SHIPITRON_VERSION} && \
51
51
  mkdir -p /home/shipitron/.ssh && \
52
52
  chown shipitron:shipitron /home/shipitron/.ssh && \
53
53
  chmod 700 /home/shipitron/.ssh
54
54
 
55
- COPY scripts/docker-entrypoint.sh /docker-entrypoint.sh
55
+ COPY scripts/release-entrypoint.sh /docker-entrypoint.sh
56
56
 
57
57
  ENTRYPOINT ["/sbin/tini", "-g", "--", "/docker-entrypoint.sh"]
58
58
  CMD ["help"]
@@ -0,0 +1,70 @@
1
+ FROM ruby:2.7.3-alpine
2
+ LABEL maintainer="Ryan Schlesinger <ryan@outstand.com>"
3
+
4
+ RUN addgroup -S shipitron && \
5
+ adduser -S -G shipitron shipitron && \
6
+ addgroup -g 1101 docker && \
7
+ addgroup shipitron docker
8
+
9
+ RUN apk add --no-cache \
10
+ ca-certificates \
11
+ openssl-dev \
12
+ tini \
13
+ su-exec \
14
+ build-base \
15
+ git \
16
+ git-lfs \
17
+ openssh-client \
18
+ perl \
19
+ bash \
20
+ curl \
21
+ wget \
22
+ jq \
23
+ cmake
24
+
25
+ ENV ECR_CREDENTIAL_HELPER_VERSION 0.5.0
26
+ RUN cd /usr/local/bin && \
27
+ wget https://amazon-ecr-credential-helper-releases.s3.us-east-2.amazonaws.com/${ECR_CREDENTIAL_HELPER_VERSION}/linux-amd64/docker-credential-ecr-login && \
28
+ chmod +x docker-credential-ecr-login
29
+
30
+ ENV BUILDKIT_VERSION v0.8.3
31
+ RUN cd /usr/local/bin && \
32
+ wget -nv https://github.com/moby/buildkit/releases/download/${BUILDKIT_VERSION}/buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz && \
33
+ tar --strip-components=1 -zxvf buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz bin/buildctl && \
34
+ chmod +x buildctl && \
35
+ rm -f buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz
36
+
37
+ USER shipitron
38
+ ENV BUILDX_VERSION v0.5.1
39
+ RUN cd /home/shipitron && \
40
+ wget -nv https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64 && \
41
+ mkdir -p ~/.docker/cli-plugins && \
42
+ mv buildx-${BUILDX_VERSION}.linux-amd64 ~/.docker/cli-plugins/docker-buildx && \
43
+ chmod a+x ~/.docker/cli-plugins/docker-buildx
44
+
45
+ USER root
46
+ ENV USE_BUNDLE_EXEC true
47
+ ENV BUNDLE_GEMFILE /shipitron/Gemfile
48
+
49
+ ENV BUNDLER_VERSION 2.2.21
50
+ RUN gem install bundler -v ${BUNDLER_VERSION} -i /usr/local/lib/ruby/gems/$(ls /usr/local/lib/ruby/gems) --force
51
+
52
+ WORKDIR /shipitron
53
+ COPY Gemfile shipitron.gemspec /shipitron/
54
+ COPY lib/shipitron/version.rb /shipitron/lib/shipitron/
55
+ COPY exe/shipitron /shipitron/exe/shipitron
56
+ COPY .git/ /shipitron/
57
+
58
+ RUN bundle install
59
+
60
+ COPY . /shipitron/
61
+ RUN mkdir -p /home/shipitron/.ssh && \
62
+ chown shipitron:shipitron /home/shipitron/.ssh && \
63
+ chmod 700 /home/shipitron/.ssh
64
+
65
+ WORKDIR /app
66
+
67
+ COPY scripts/release-entrypoint.sh /docker-entrypoint.sh
68
+
69
+ ENTRYPOINT ["/sbin/tini", "-g", "--", "/docker-entrypoint.sh"]
70
+ CMD ["help"]
data/Gemfile CHANGED
@@ -2,3 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
  gem 'irb'
5
+ gem 'rspec-buildkite', github: 'outstand/rspec-buildkite', branch: 'error-output'
data/README.md CHANGED
@@ -68,23 +68,25 @@ If a containerized tool requires access to AWS resources, be sure to pass the `A
68
68
 
69
69
  ## Development
70
70
 
71
- - `./build_dev.sh`
72
- - `dev run --rm shipitron_specs` to run specs
71
+ - `desk go`
72
+ - `dev build --pull shipitron`
73
+ - `rspec specs` to run specs
73
74
  - Set the application path in the volumes section in `docker-compose.yml`.
74
- - `dev run --rm shipitron deploy <app>` to run client side
75
- - `dev run --rm shipitron deploy <app> --simulate` to get the arguments for `server_deploy` below
76
- - `dev run --rm -v /bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock shipitron server_deploy --name dummy-app --repository git@github.com:outstand/dummy-app --bucket outstand-shipitron --image-name outstand/dummy-app --region us-east-1 --cluster-name us-east-1-prod-blue --ecs-task-defs dummy-app --ecs-services dummy-app --build-script shipitron/build.sh --post-builds 'ecs_task:dummy-app,container_name:dummy-app,command:echo postbuild' --ecs-task-def-templates LS0tCmZhbWlseTogZHVtbXktYXBwCmNvbnRhaW5lcl9kZWZpbml0aW9uczoKICAtIG5hbWU6IGR1bW15LWFwcAogICAgaW1hZ2U6IG91dHN0YW5kL2R1bW15LWFwcDp7e3RhZ319CiAgICBtZW1vcnk6IDEyOAogICAgZXNzZW50aWFsOiB0cnVlCiAgICBwb3J0X21hcHBpbmdzOgogICAgICAtIGNvbnRhaW5lcl9wb3J0OiA4MAogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gbmFtZTogU0VSVklDRV84MF9OQU1FCiAgICAgICAgdmFsdWU6IGR1bW15Cg== --ecs-service-templates LS0tCmNsdXN0ZXI6IHt7Y2x1c3Rlcn19CnNlcnZpY2VfbmFtZTogZHVtbXktYXBwCnRhc2tfZGVmaW5pdGlvbjogZHVtbXktYXBwe3tyZXZpc2lvbn19CmRlc2lyZWRfY291bnQ6IHt7Y291bnR9fQojcm9sZToge3tyb2xlfX0KZGVwbG95bWVudF9jb25maWd1cmF0aW9uOgogIG1heGltdW1fcGVyY2VudDogMjAwCiAgbWluaW11bV9oZWFsdGh5X3BlcmNlbnQ6IDUwCg== --debug` to run server side (dummy-app is an example)
75
+ - `shipitron deploy <app>` to run client side
76
+ - `shipitron deploy <app> --simulate-store-deploy` to save the deploy options to S3 and generate deploy id
77
+ - `dev run --rm -v /bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock shipitron server_deploy --deploy-id <deploy_id>` to run server side
77
78
 
78
79
  Running a dev version in production:
79
- - Update `Shipitron::Client::STARTED_BY`
80
- - `docker push outstand/shipitron:dev`
81
- - Update config to use `shipitron_task: shipitron-dev`
82
- - `dev run --rm shipitron deploy <app> --debug`
80
+ - Ensure `SHIPITRON_STARTED_BY` env var is set for your `shipitron-staging` task def
81
+ - `docker build --pull -t outstand/shipitron:staging -f Dockerfile.staging .`
82
+ - `docker push outstand/shipitron:staging`
83
+ - Update config to use `shipitron_task: shipitron-staging` and `outstand/shipitron:staging`
84
+ - `shipitron deploy <app> --debug`
83
85
 
84
86
  To release a new version:
85
87
  - Update the version number in `version.rb` and `Dockerfile.release` and commit the result.
86
- - `./build_dev.sh`
87
- - `docker run -it --rm -v ~/.gitconfig:/root/.gitconfig -v ~/.gitconfig.user:/root/.gitconfig.user -v ~/.ssh/id_rsa:/root/.ssh/id_rsa -v ~/.gem:/root/.gem -w /shipitron outstand/shipitron:dev rake release`
88
+ - `dev build --pull shipitron`
89
+ - `release_gem`
88
90
  - `VERSION=<version>`
89
91
  - `docker build -t outstand/shipitron:$VERSION -f Dockerfile.release .`
90
92
  - `docker push outstand/shipitron:$VERSION`
data/docker-compose.yml CHANGED
@@ -1,24 +1,54 @@
1
1
  version: '3.8'
2
2
  services:
3
3
  shipitron:
4
+ build: .
4
5
  image: outstand/shipitron:dev
6
+ environment:
7
+ FIXUID:
8
+ FIXGID:
5
9
  volumes:
6
- - ~/dev/pages:/app # Set this to the application to be shipitron'd
10
+ - bundler-data:/usr/local/bundle
11
+ - ~/dev/app:/app # Set this to the application to be shipitron'd
7
12
  - shipitron-home:/home/shipitron
8
13
  - ~/.config/shipitron:/home/shipitron/.config/shipitron
9
14
  - .:/shipitron
10
- shipitron_specs:
15
+
16
+ specs:
17
+ build: .
11
18
  image: outstand/shipitron:dev
12
- command: rspec spec
19
+ command: rspec
13
20
  environment:
14
21
  FOG_LOCAL: 'true'
22
+ FIXUID:
23
+ FIXGID:
24
+ BUILDKITE:
25
+ BUILDKITE_BUILD_URL:
26
+ BUILDKITE_JOB_ID:
27
+ BUILDKITE_AGENT_ACCESS_TOKEN:
15
28
  working_dir: /shipitron
16
29
  volumes:
30
+ - bundler-data:/usr/local/bundle
17
31
  - fog:/fog
18
32
  - shipitron-home:/home/shipitron
19
- - ~/.config/shipitron:/home/shipitron/.config/shipitron
20
33
  - .:/shipitron
21
34
 
35
+ release_gem:
36
+ image: outstand/shipitron:dev
37
+ command: rake release
38
+ working_dir: /shipitron
39
+ environment:
40
+ FIXUID:
41
+ FIXGID:
42
+ volumes:
43
+ - bundler-data:/usr/local/bundle
44
+ - shipitron-home:/home/shipitron
45
+ - .:/shipitron
46
+ - ~/.dotfiles/gitconfig:/root/.gitconfig
47
+ - ~/.dotfiles/gitconfig.user:/root/.gitconfig.user
48
+ - ~/.ssh/id_rsa:/root/.ssh/id_rsa
49
+ - ~/.gem:/root/.gem
50
+
22
51
  volumes:
23
52
  fog:
24
53
  shipitron-home:
54
+ bundler-data:
data/lib/shipitron.rb CHANGED
@@ -7,6 +7,8 @@ require 'shipitron/smash'
7
7
  module Shipitron
8
8
  CONFIG_FILE = 'shipitron/config.yml'.freeze
9
9
  SECRETS_FILE = '~/.config/shipitron/secrets.yml'.freeze
10
+ GLOBAL_CONFIG_FILE = '~/.config/shipitron/config.yml'.freeze
11
+ DEPLOY_BUCKET_PREFIX = "deploys/"
10
12
 
11
13
  class << self
12
14
  def config_file
@@ -18,10 +20,10 @@ module Shipitron
18
20
  end
19
21
 
20
22
  def config
21
- @config ||= Smash.load(Pathname.new(config_file).expand_path.to_s).merge(secrets)
23
+ @config ||= Smash.load(Pathname.new(config_file).expand_path.to_s).merge(secrets).merge(global_config)
22
24
  rescue ArgumentError
23
25
  Logger.warn "Config file '#{config_file}' does not exist"
24
- @config = secrets
26
+ @config = secrets.merge(global_config)
25
27
  end
26
28
 
27
29
  def secrets_file
@@ -38,5 +40,20 @@ module Shipitron
38
40
  Logger.warn "Secrets file '#{secrets_file}' does not exist"
39
41
  @secrets = Smash.new
40
42
  end
43
+
44
+ def global_config_file
45
+ @global_config_file ||= GLOBAL_CONFIG_FILE
46
+ end
47
+
48
+ def global_config_file=(file)
49
+ @global_config_file = file
50
+ end
51
+
52
+ def global_config
53
+ @global_config ||= Smash.load(Pathname.new(global_config_file).expand_path.to_s)
54
+ rescue ArgumentError
55
+ Logger.warn "Global config file '#{global_config_file}' does not exist"
56
+ @global_config = Smash.new
57
+ end
41
58
  end
42
59
  end
data/lib/shipitron/cli.rb CHANGED
@@ -12,18 +12,22 @@ module Shipitron
12
12
  desc 'deploy <app>', 'Deploys the app'
13
13
  option :config_file, default: 'shipitron/config.yml'
14
14
  option :secrets_file, default: '~/.config/shipitron/secrets.yml'
15
+ option :global_config_file, default: '~/.config/shipitron/config.yml'
15
16
  option :debug, type: :boolean, default: false
16
17
  option :simulate, type: :boolean, default: false
18
+ option :simulate_store_deploy, type: :boolean, default: false, desc: "Simulate and store deploy config in S3"
17
19
  def deploy(app)
18
20
  setup(
19
21
  config_file: options[:config_file],
20
- secrets_file: options[:secrets_file]
22
+ secrets_file: options[:secrets_file],
23
+ global_config_file: options[:global_config_file]
21
24
  )
22
25
 
23
26
  require 'shipitron/client/deploy_application'
24
27
  result = Client::DeployApplication.call(
25
28
  application: app,
26
- simulate: options[:simulate]
29
+ simulate: options[:simulate],
30
+ simulate_store_deploy: options[:simulate_store_deploy]
27
31
  )
28
32
 
29
33
  if result.failure?
@@ -59,49 +63,40 @@ module Shipitron
59
63
 
60
64
 
61
65
  desc 'server_deploy', 'Server-side component of deploy'
62
- option :name, required: true
63
- option :repository, required: true
64
- option :repository_branch, default: 'master'
65
- option :registry, default: nil
66
- option :bucket, required: true
67
- option :build_cache_location, default: 'tmp/build-cache.tar.gz'
68
- option :image_name, required: true
69
- option :named_tag, default: 'latest'
70
- option :skip_push, type: :boolean, default: false
71
- option :region, required: true
72
- option :clusters, type: :array, required: true
73
- option :ecs_task_defs, type: :array, required: true
74
- option :ecs_task_def_templates, type: :array, default: []
75
- option :ecs_services, type: :array, default: []
76
- option :ecs_service_templates, type: :array, default: []
77
- option :build_script, default: nil
78
- option :post_builds, type: :array
79
- option :secrets_file, default: '~/.config/shipitron/secrets.yml'
80
- option :debug, type: :boolean, default: false
66
+ option :deploy_id, required: true
81
67
  def server_deploy
82
- setup(
83
- secrets_file: options[:secrets_file]
84
- )
68
+ setup
69
+
70
+ if !ENV.key?("SHIPITRON_DEPLOY_BUCKET") || !ENV.key?("SHIPITRON_DEPLOY_BUCKET_REGION")
71
+ raise "Missing shipitron deploy bucket env vars!"
72
+ end
73
+
74
+ require 'shipitron/server/fetch_deploy'
75
+ deploy_options = Server::FetchDeploy.call!(
76
+ deploy_bucket: ENV["SHIPITRON_DEPLOY_BUCKET"],
77
+ deploy_bucket_region: ENV["SHIPITRON_DEPLOY_BUCKET_REGION"],
78
+ deploy_id: options[:deploy_id]
79
+ ).deploy_options
85
80
 
86
81
  require 'shipitron/server/transform_cli_args'
87
82
  cli_args = Server::TransformCliArgs.call!(
88
- application: options[:name],
89
- repository_url: options[:repository],
90
- repository_branch: options[:repository_branch],
91
- registry: options[:registry],
92
- s3_cache_bucket: options[:bucket],
93
- build_cache_location: options[:build_cache_location],
94
- image_name: options[:image_name],
95
- named_tag: options[:named_tag],
96
- skip_push: options[:skip_push],
97
- region: options[:region],
98
- clusters: options[:clusters],
99
- ecs_task_defs: options[:ecs_task_defs],
100
- ecs_task_def_templates: options[:ecs_task_def_templates],
101
- ecs_services: options[:ecs_services],
102
- ecs_service_templates: options[:ecs_service_templates],
103
- build_script: options[:build_script],
104
- post_builds: options[:post_builds]
83
+ application: deploy_options[:name],
84
+ repository_url: deploy_options[:repository],
85
+ repository_branch: deploy_options[:repository_branch],
86
+ registry: deploy_options[:registry],
87
+ s3_cache_bucket: deploy_options[:bucket],
88
+ build_cache_location: deploy_options[:build_cache_location],
89
+ image_name: deploy_options[:image_name],
90
+ named_tag: deploy_options[:named_tag],
91
+ skip_push: deploy_options[:skip_push],
92
+ region: deploy_options[:region],
93
+ clusters: deploy_options[:clusters],
94
+ ecs_task_defs: deploy_options[:ecs_task_defs],
95
+ ecs_task_def_templates: deploy_options[:ecs_task_def_templates],
96
+ ecs_services: deploy_options[:ecs_services],
97
+ ecs_service_templates: deploy_options[:ecs_service_templates],
98
+ build_script: deploy_options[:build_script],
99
+ post_builds: deploy_options[:post_builds]
105
100
  ).cli_args
106
101
 
107
102
  require 'shipitron/server/deploy_application'
@@ -149,7 +144,7 @@ module Shipitron
149
144
  end
150
145
 
151
146
  private
152
- def setup(config_file:nil, secrets_file:nil)
147
+ def setup(config_file:nil, secrets_file:nil, global_config_file:nil)
153
148
  $stdout.sync = true
154
149
  if options[:debug] == false
155
150
  Logger.level = :info
@@ -157,6 +152,7 @@ module Shipitron
157
152
 
158
153
  Shipitron.config_file = config_file unless config_file.nil?
159
154
  Shipitron.secrets_file = secrets_file unless secrets_file.nil?
155
+ Shipitron.global_config_file = global_config_file unless global_config_file.nil?
160
156
  end
161
157
  end
162
158
  end
@@ -2,8 +2,8 @@ require 'shipitron'
2
2
 
3
3
  module Shipitron
4
4
  module Client
5
- STARTED_BY = 'shipitron'
6
- # Use this for testing.
7
- # STARTED_BY = 'shipitron-dev'
5
+ def self.started_by
6
+ ENV.fetch("SHIPITRON_STARTED_BY", "shipitron")
7
+ end
8
8
  end
9
9
  end
@@ -14,6 +14,7 @@ module Shipitron
14
14
 
15
15
  required :application
16
16
  optional :simulate
17
+ optional :simulate_store_deploy
17
18
 
18
19
  organize [
19
20
  LoadApplicationConfig,
@@ -22,7 +22,7 @@ module Shipitron
22
22
  begin
23
23
  response = ecs_client(region: cluster.region).list_tasks(
24
24
  cluster: cluster.name,
25
- started_by: Shipitron::Client::STARTED_BY,
25
+ started_by: Shipitron::Client.started_by,
26
26
  max_results: 1,
27
27
  desired_status: status
28
28
  )
@@ -0,0 +1,41 @@
1
+ require 'shipitron'
2
+ require 'shipitron/client'
3
+ require 'shipitron/fetch_bucket'
4
+ require 'aws-sdk-s3'
5
+ require 'pastel'
6
+
7
+ module Shipitron
8
+ module Client
9
+ class GenerateDeploy
10
+ include Metaractor
11
+
12
+ required :server_deploy_opts
13
+ required :deploy_id
14
+
15
+ def call
16
+ s3_key = "#{Shipitron::DEPLOY_BUCKET_PREFIX}#{context.deploy_id}"
17
+ pastel = Pastel.new
18
+ Logger.info "Uploading deploy config to #{pastel.blue("s3://#{deploy_bucket}/#{s3_key}")}"
19
+
20
+ client = Aws::S3::Client.new(region: deploy_bucket_region)
21
+
22
+ client.put_object(
23
+ bucket: deploy_bucket,
24
+ key: s3_key,
25
+ body: context.server_deploy_opts.to_json,
26
+ acl: "private"
27
+ )
28
+ end
29
+
30
+ private
31
+
32
+ def deploy_bucket
33
+ Shipitron.config.deploy_bucket
34
+ end
35
+
36
+ def deploy_bucket_region
37
+ Shipitron.config.deploy_bucket_region
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,6 +1,7 @@
1
1
  require 'shipitron'
2
2
  require 'shipitron/client'
3
3
  require 'shipitron/post_build'
4
+ require 'aws-sdk-core'
4
5
 
5
6
  module Shipitron
6
7
  module Client
@@ -38,6 +39,19 @@ module Shipitron
38
39
  context.ecs_services = config.ecs_services
39
40
  context.ecs_task_def_dir = config.ecs_task_def_dir
40
41
  context.ecs_service_dir = config.ecs_service_dir
42
+
43
+ if Shipitron.config.aws_access_key_id? && Shipitron.config.aws_secret_access_key?
44
+ Aws.config.update(
45
+ credentials: Aws::Credentials.new(
46
+ Shipitron.config.aws_access_key_id,
47
+ Shipitron.config.aws_secret_access_key
48
+ )
49
+ )
50
+ end
51
+
52
+ if !Shipitron.config.deploy_bucket? || !Shipitron.config.deploy_bucket_region?
53
+ raise "Missing required deploy bucket configuration!"
54
+ end
41
55
  end
42
56
 
43
57
  private
@@ -1,10 +1,12 @@
1
1
  require 'shipitron'
2
2
  require 'shipitron/client'
3
3
  require 'shipitron/ecs_client'
4
+ require 'shipitron/client/generate_deploy'
4
5
  require 'shellwords'
5
6
  require 'base64'
6
7
  require 'tty-table'
7
8
  require 'pastel'
9
+ require 'securerandom'
8
10
 
9
11
  module Shipitron
10
12
  module Client
@@ -21,23 +23,17 @@ module Shipitron
21
23
  required :image_name
22
24
  required :named_tag
23
25
  required :ecs_task_defs
24
- optional :ecs_task_def_templates
25
- optional :ecs_services
26
- optional :ecs_service_templates
26
+ optional :ecs_task_def_templates, default: []
27
+ optional :ecs_services, default: []
28
+ optional :ecs_service_templates, default: []
27
29
  optional :build_script
28
30
  optional :skip_push
29
- optional :post_builds
31
+ optional :post_builds, default: []
30
32
  optional :simulate
33
+ optional :simulate_store_deploy
31
34
  optional :repository_branch
32
35
  optional :registry
33
36
 
34
- before do
35
- context.post_builds ||= []
36
- context.ecs_task_def_templates ||= {}
37
- context.ecs_services ||= []
38
- context.ecs_service_templates ||= {}
39
- end
40
-
41
37
  def call
42
38
  Logger.info "Skipping ECS run_task calls due to --simulate" if simulate?
43
39
 
@@ -56,27 +52,31 @@ module Shipitron
56
52
  Logger.info line.chomp
57
53
  end
58
54
 
59
- cluster = clusters.first
55
+ @cluster = clusters.first
60
56
 
61
57
  begin
62
58
  if simulate?
63
- command_args(cluster)
59
+ server_deploy_opts
60
+ generate_deploy! if context.simulate_store_deploy == true
61
+
64
62
  return
65
63
  end
66
64
 
67
- response = ecs_client(region: cluster.region).run_task(
68
- cluster: cluster.name,
65
+ generate_deploy!
66
+
67
+ response = ecs_client(region: @cluster.region).run_task(
68
+ cluster: @cluster.name,
69
69
  task_definition: shipitron_task,
70
70
  overrides: {
71
71
  container_overrides: [
72
72
  {
73
73
  name: 'shipitron',
74
- command: command_args(cluster)
74
+ command: command_args(deploy_id: deploy_id)
75
75
  }
76
76
  ]
77
77
  },
78
78
  count: 1,
79
- started_by: Shipitron::Client::STARTED_BY
79
+ started_by: Shipitron::Client.started_by
80
80
  )
81
81
 
82
82
  if !response.failures.empty?
@@ -106,81 +106,99 @@ module Shipitron
106
106
  context.shipitron_task
107
107
  end
108
108
 
109
- def command_args(cluster)
109
+ def deploy_id
110
+ return @_deploy_id if defined?(@_deploy_id)
111
+
112
+ @_deploy_id = SecureRandom.uuid
113
+ end
114
+
115
+ def generate_deploy!
116
+ Shipitron::Client::GenerateDeploy.call!(
117
+ server_deploy_opts: server_deploy_opts,
118
+ deploy_id: deploy_id
119
+ )
120
+ end
121
+
122
+ def command_args(deploy_id:)
110
123
  [
111
124
  'server_deploy',
112
- '--name', context.application,
113
- '--repository', context.repository_url,
114
- '--bucket', context.s3_cache_bucket,
115
- '--build-cache-location', context.build_cache_location,
116
- '--image-name', context.image_name,
117
- '--named-tag', context.named_tag,
118
- '--region', cluster.region,
119
- ].tap do |ary|
120
- ary << '--clusters'
121
- ary.concat(context.clusters.map(&:name))
122
-
123
- ary << '--ecs-task-defs'
124
- ary.concat(context.ecs_task_defs)
125
-
126
- unless context.ecs_services.empty?
127
- ary << '--ecs-services'
128
- ary.concat(context.ecs_services)
129
- end
125
+ '--deploy-id', deploy_id
126
+ ]
127
+ end
130
128
 
131
- if context.registry != nil
132
- ary.concat ['--registry', context.registry]
133
- end
129
+ def server_deploy_opts
130
+ return @_server_deploy_opts if defined?(@_server_deploy_opts)
131
+
132
+ @_server_deploy_opts =
133
+ {
134
+ name: context.application,
135
+ repository: context.repository_url,
136
+ bucket: context.s3_cache_bucket,
137
+ build_cache_location: context.build_cache_location,
138
+ image_name: context.image_name,
139
+ named_tag: context.named_tag,
140
+ region: @cluster.region
141
+ }.tap do |opts|
142
+ opts[:clusters] =
143
+ context.clusters.map(&:name)
144
+
145
+ opts[:ecs_task_defs] =
146
+ context.ecs_task_defs
147
+
148
+ unless context.ecs_services.empty?
149
+ opts[:ecs_services] =
150
+ context.ecs_services
151
+ end
134
152
 
135
- if context.build_script != nil
136
- ary.concat ['--build-script', context.build_script]
137
- end
153
+ if context.registry != nil
154
+ opts[:registry] = context.registry
155
+ end
138
156
 
139
- if context.skip_push != nil
140
- ary.concat ['--skip-push', context.skip_push.to_s]
141
- end
157
+ if context.build_script != nil
158
+ opts[:build_script] = context.build_script
159
+ end
142
160
 
143
- if !context.post_builds.empty?
144
- ary << '--post-builds'
145
- ary.concat(context.post_builds.map(&:to_s))
146
- end
161
+ if context.skip_push != nil
162
+ opts[:skip_push] = context.skip_push.to_s
163
+ end
147
164
 
148
- if !context.ecs_task_def_templates.empty?
149
- ary << '--ecs-task-def-templates'
150
- ary.concat(
151
- context.ecs_task_def_templates.map do |name, data|
152
- if context.ecs_task_defs.include?(name)
153
- Base64.urlsafe_encode64(data)
154
- end
155
- end.compact
156
- )
157
- end
165
+ if !context.post_builds.empty?
166
+ opts[:post_builds] =
167
+ context.post_builds.map(&:to_s)
168
+ end
158
169
 
159
- if !context.ecs_service_templates.empty?
160
- ary << '--ecs-service-templates'
161
- ary.concat(
162
- context.ecs_service_templates.map do |name, data|
163
- if context.ecs_services.include?(name)
164
- Base64.urlsafe_encode64(data)
165
- end
166
- end.compact
167
- )
168
- end
170
+ if !context.ecs_task_def_templates.empty?
171
+ opts[:ecs_task_def_templates] =
172
+ context.ecs_task_def_templates.map do |name, data|
173
+ if context.ecs_task_defs.include?(name)
174
+ Base64.urlsafe_encode64(data)
175
+ end
176
+ end.compact
177
+ end
169
178
 
170
- unless context.repository_branch.nil?
171
- ary.concat ['--repository-branch', context.repository_branch]
172
- end
179
+ if !context.ecs_service_templates.empty?
180
+ opts[:ecs_service_templates] =
181
+ context.ecs_service_templates.map do |name, data|
182
+ if context.ecs_services.include?(name)
183
+ Base64.urlsafe_encode64(data)
184
+ end
185
+ end.compact
186
+ end
173
187
 
174
- if simulate?
175
- Logger.info "server_deploy command: #{ary.shelljoin}"
176
- else
177
- Logger.debug "server_deploy command: #{ary.shelljoin}"
188
+ unless context.repository_branch.nil?
189
+ opts[:repository_branch] = context.repository_branch
190
+ end
191
+
192
+ if simulate?
193
+ Logger.info "server_deploy opts:\n#{JSON.pretty_generate(opts)}"
194
+ else
195
+ Logger.debug "server_deploy opts:\n#{JSON.pretty_generate(opts)}"
196
+ end
178
197
  end
179
- end
180
198
  end
181
199
 
182
200
  def simulate?
183
- context.simulate == true
201
+ context.simulate == true || context.simulate_store_deploy == true
184
202
  end
185
203
  end
186
204
  end
@@ -0,0 +1,50 @@
1
+ require 'shipitron'
2
+ require 'aws-sdk-s3'
3
+ require 'json'
4
+
5
+ module Shipitron
6
+ module Server
7
+ class FetchDeploy
8
+ include Metaractor
9
+
10
+ required :deploy_bucket
11
+ required :deploy_bucket_region
12
+ required :deploy_id
13
+
14
+ def call
15
+ s3_key = "#{Shipitron::DEPLOY_BUCKET_PREFIX}#{context.deploy_id}"
16
+ Logger.info "Fetching deploy config from s3://#{deploy_bucket}/#{s3_key}"
17
+
18
+ response = client.get_object(
19
+ bucket: deploy_bucket,
20
+ key: s3_key
21
+ )
22
+
23
+ context.deploy_options =
24
+ JSON.parse(response.body.read)
25
+ .transform_keys {|k| k.to_sym }
26
+ end
27
+
28
+ private
29
+
30
+ def client
31
+ Aws::S3::Client.new(
32
+ region: deploy_bucket_region,
33
+ **client_opts
34
+ )
35
+ end
36
+
37
+ def client_opts
38
+ {}
39
+ end
40
+
41
+ def deploy_bucket
42
+ context.deploy_bucket
43
+ end
44
+
45
+ def deploy_bucket_region
46
+ context.deploy_bucket_region
47
+ end
48
+ end
49
+ end
50
+ end
@@ -13,7 +13,7 @@ module Shipitron
13
13
  optional :repository_branch
14
14
 
15
15
  before do
16
- context.repository_branch ||= 'master'
16
+ context.repository_branch ||= 'main'
17
17
  end
18
18
 
19
19
  def call
@@ -13,7 +13,7 @@ module Shipitron
13
13
  optional :repository_branch
14
14
 
15
15
  before do
16
- context.repository_branch ||= 'master'
16
+ context.repository_branch ||= 'main'
17
17
  end
18
18
 
19
19
  def call
@@ -1,3 +1,3 @@
1
1
  module Shipitron
2
- VERSION = '1.3.2'
2
+ VERSION = '1.4.0'
3
3
  end
@@ -1,14 +1,26 @@
1
1
  #!/bin/sh
2
- set -e
2
+
3
+ set -euo pipefail
4
+
5
+ su-exec ${FIXUID:?Missing FIXUID var}:${FIXGID:?Missing FIXGID var} fixuid
3
6
 
4
7
  chown_dir() {
5
8
  dir=$1
6
- if [ "$(stat -c %u ${dir})" = '0' ]; then
7
- chown -R shipitron:shipitron $dir
9
+ if [[ -d ${dir} ]] && [[ "$(stat -c %u:%g ${dir})" != "${FIXUID}:${FIXGID}" ]]; then
10
+ echo chown $dir
11
+ chown shipitron:shipitron $dir
8
12
  fi
9
13
  }
10
14
 
11
15
  chown_dir /home/shipitron
16
+ chown_dir /usr/local/bundle
17
+
18
+ if [ "$1" = 'bundle' ]; then
19
+ set -- su-exec shipitron "$@"
20
+ exec "$@"
21
+ elif [ "$1" = 'rake' ] && [ "$2" = 'release' ]; then
22
+ exec "$@"
23
+ fi
12
24
 
13
25
  if [ -n "$USE_BUNDLE_EXEC" ]; then
14
26
  BINARY="bundle exec shipitron"
@@ -16,10 +28,23 @@ else
16
28
  BINARY=shipitron
17
29
  fi
18
30
 
19
- if ${BINARY} help "$1" 2>&1 | grep -q "shipitron $1"; then
31
+ if [ "$(ls -A /usr/local/bundle/bin)" = '' ]; then
32
+ echo 'command not in path and bundler not initialized'
33
+ echo 'running bundle install'
34
+ su-exec shipitron bundle install
35
+ else
36
+ su-exec shipitron bash -c 'bundle check || bundle install'
37
+ fi
38
+
39
+ # ${BINARY} help "$1"
40
+
41
+ if ls /usr/local/bundle/bin | grep -q "\b$1\b"; then
42
+ set -- su-exec shipitron bundle exec "$@"
43
+
44
+ elif ${BINARY} help "$1" 2>&1 | grep -q "shipitron $1"; then
20
45
  set -- su-exec shipitron ${BINARY} "$@"
21
46
 
22
- if [ -n "$FOG_LOCAL" ]; then
47
+ if [ -n "${FOG_LOCAL:-}" ]; then
23
48
  chown -R shipitron:shipitron /fog
24
49
  fi
25
50
  fi
@@ -0,0 +1,20 @@
1
+ #!/bin/sh
2
+
3
+ set -euo pipefail
4
+
5
+ if [ -n "$USE_BUNDLE_EXEC" ]; then
6
+ BINARY="bundle exec shipitron"
7
+ else
8
+ BINARY=shipitron
9
+ fi
10
+
11
+ # ${BINARY} help "$1"
12
+
13
+ if ls /usr/local/bundle/bin | grep -q "\b$1\b"; then
14
+ set -- su-exec shipitron bundle exec "$@"
15
+
16
+ elif ${BINARY} help "$1" 2>&1 | grep -q "shipitron $1"; then
17
+ set -- su-exec shipitron ${BINARY} "$@"
18
+ fi
19
+
20
+ exec "$@"
data/shipitron.gemspec CHANGED
@@ -19,8 +19,9 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_runtime_dependency 'thor', '~> 1.0'
21
21
  spec.add_runtime_dependency 'aws-sdk-ecs', '~> 1.8'
22
+ spec.add_runtime_dependency 'aws-sdk-s3', '~> 1.96'
22
23
  spec.add_runtime_dependency 'hashie', '~> 4.1'
23
- spec.add_runtime_dependency 'metaractor', '~> 3.0'
24
+ spec.add_runtime_dependency 'metaractor', '~> 3.1'
24
25
  spec.add_runtime_dependency 'diplomat', '~> 2.0'
25
26
  spec.add_runtime_dependency 'fog-aws', '~> 3.6'
26
27
  spec.add_runtime_dependency 'mime-types', '~> 3.1'
@@ -29,13 +30,13 @@ Gem::Specification.new do |spec|
29
30
  spec.add_runtime_dependency 'tty-command', '~> 0.7'
30
31
  spec.add_runtime_dependency 'tty-table', '~> 0.9'
31
32
  spec.add_runtime_dependency 'pastel', '~> 0.7'
32
- spec.add_runtime_dependency 'excon', '~> 0.76'
33
+ spec.add_runtime_dependency 'excon', '~> 0.82'
33
34
  spec.add_runtime_dependency 'rugged', '~> 1.0'
34
35
 
35
36
  spec.add_development_dependency "bundler", "~> 2.1"
36
37
  spec.add_development_dependency "rake", "~> 13.0"
37
- spec.add_development_dependency "pry-byebug", "~> 3.5"
38
- spec.add_development_dependency "rspec", "~> 3.7"
38
+ spec.add_development_dependency "pry-byebug", "~> 3.9"
39
+ spec.add_development_dependency "rspec", "~> 3.10"
39
40
  spec.add_development_dependency "fivemat", "~> 1.3"
40
41
  spec.add_development_dependency "fog-local", "~> 0.4"
41
42
  end
data/test.yml ADDED
@@ -0,0 +1,5 @@
1
+ version: '3.8'
2
+ services:
3
+ specs:
4
+ volumes:
5
+ - "/var/lib/buildkite-agent/buildkite-agent:/usr/local/bin/buildkite-agent"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shipitron
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Schlesinger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-19 00:00:00.000000000 Z
11
+ date: 2021-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aws-sdk-s3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.96'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.96'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: hashie
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +72,14 @@ dependencies:
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '3.0'
75
+ version: '3.1'
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '3.0'
82
+ version: '3.1'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: diplomat
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +198,14 @@ dependencies:
184
198
  requirements:
185
199
  - - "~>"
186
200
  - !ruby/object:Gem::Version
187
- version: '0.76'
201
+ version: '0.82'
188
202
  type: :runtime
189
203
  prerelease: false
190
204
  version_requirements: !ruby/object:Gem::Requirement
191
205
  requirements:
192
206
  - - "~>"
193
207
  - !ruby/object:Gem::Version
194
- version: '0.76'
208
+ version: '0.82'
195
209
  - !ruby/object:Gem::Dependency
196
210
  name: rugged
197
211
  requirement: !ruby/object:Gem::Requirement
@@ -240,28 +254,28 @@ dependencies:
240
254
  requirements:
241
255
  - - "~>"
242
256
  - !ruby/object:Gem::Version
243
- version: '3.5'
257
+ version: '3.9'
244
258
  type: :development
245
259
  prerelease: false
246
260
  version_requirements: !ruby/object:Gem::Requirement
247
261
  requirements:
248
262
  - - "~>"
249
263
  - !ruby/object:Gem::Version
250
- version: '3.5'
264
+ version: '3.9'
251
265
  - !ruby/object:Gem::Dependency
252
266
  name: rspec
253
267
  requirement: !ruby/object:Gem::Requirement
254
268
  requirements:
255
269
  - - "~>"
256
270
  - !ruby/object:Gem::Version
257
- version: '3.7'
271
+ version: '3.10'
258
272
  type: :development
259
273
  prerelease: false
260
274
  version_requirements: !ruby/object:Gem::Requirement
261
275
  requirements:
262
276
  - - "~>"
263
277
  - !ruby/object:Gem::Version
264
- version: '3.7'
278
+ version: '3.10'
265
279
  - !ruby/object:Gem::Dependency
266
280
  name: fivemat
267
281
  requirement: !ruby/object:Gem::Requirement
@@ -298,17 +312,19 @@ executables:
298
312
  extensions: []
299
313
  extra_rdoc_files: []
300
314
  files:
315
+ - ".buildkite/pipeline.yml"
301
316
  - ".dockerignore"
302
317
  - ".gitattributes"
303
318
  - ".gitignore"
304
319
  - ".rspec"
320
+ - Deskfile
305
321
  - Dockerfile
306
322
  - Dockerfile.release
323
+ - Dockerfile.staging
307
324
  - Gemfile
308
325
  - LICENSE
309
326
  - README.md
310
327
  - Rakefile
311
- - build_dev.sh
312
328
  - docker-compose.yml
313
329
  - exe/shipitron
314
330
  - lib/shipitron.rb
@@ -320,6 +336,7 @@ files:
320
336
  - lib/shipitron/client/ensure_deploy_not_running.rb
321
337
  - lib/shipitron/client/fetch_clusters.rb
322
338
  - lib/shipitron/client/force_deploy.rb
339
+ - lib/shipitron/client/generate_deploy.rb
323
340
  - lib/shipitron/client/load_application_config.rb
324
341
  - lib/shipitron/client/load_templates.rb
325
342
  - lib/shipitron/client/register_ecs_task_definitions.rb
@@ -346,6 +363,7 @@ files:
346
363
  - lib/shipitron/server/ecs_task_defs/map_parsed_templates.rb
347
364
  - lib/shipitron/server/ecs_task_defs/update_from_params.rb
348
365
  - lib/shipitron/server/ecs_task_defs/update_in_place.rb
366
+ - lib/shipitron/server/fetch_deploy.rb
349
367
  - lib/shipitron/server/git/clone_local_copy.rb
350
368
  - lib/shipitron/server/git/configure.rb
351
369
  - lib/shipitron/server/git/download_cache.rb
@@ -361,7 +379,9 @@ files:
361
379
  - lib/shipitron/smash.rb
362
380
  - lib/shipitron/version.rb
363
381
  - scripts/docker-entrypoint.sh
382
+ - scripts/release-entrypoint.sh
364
383
  - shipitron.gemspec
384
+ - test.yml
365
385
  homepage: https://github.com/outstand/shipitron
366
386
  licenses: []
367
387
  metadata: {}
@@ -380,7 +400,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
380
400
  - !ruby/object:Gem::Version
381
401
  version: '0'
382
402
  requirements: []
383
- rubygems_version: 3.1.4
403
+ rubygems_version: 3.1.6
384
404
  signing_key:
385
405
  specification_version: 4
386
406
  summary: A deployment tool for use with Docker and ECS.
data/build_dev.sh DELETED
@@ -1,27 +0,0 @@
1
- #!/bin/bash
2
- set -e -x
3
-
4
- build_image=outstand/shipitron:dev
5
- dockerfile=Dockerfile
6
- bundler_data_dir=cache
7
-
8
- tar_container=''
9
-
10
- function cleanup {
11
- if [ -n "$tar_container" ]; then
12
- docker rm -fv ${tar_container}
13
- fi
14
-
15
- rm -f ${bundler_data_dir}/cidfile
16
- }
17
-
18
- trap cleanup EXIT
19
-
20
- build_args=''
21
- mkdir -p ${bundler_data_dir}
22
-
23
- docker build --pull -t ${build_image} -f ${dockerfile} ${build_args} .
24
-
25
- docker run -t --cidfile=${bundler_data_dir}/cidfile -w /usr/local/bundle ${build_image} tar -zcf /tmp/bundler-data.tar.gz .
26
- tar_container=$(cat ${bundler_data_dir}/cidfile)
27
- docker cp ${tar_container}:/tmp/bundler-data.tar.gz ${bundler_data_dir}/bundler-data.tar.gz