diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6648e16c..94ab2bd7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,7 +67,7 @@ jobs: run: kosli attest pullrequest github --github-token=${{ secrets.GITHUB_TOKEN }} - --name=saver.pull-request + --name=pull-request # lint: @@ -298,7 +298,6 @@ jobs: IMAGE_TAG: ${{ needs.kosli-trail.outputs.image_tag }} secrets: KOSLI_API_TOKEN: ${{ secrets.KOSLI_API_TOKEN }} - KOSLI_API_TOKEN_STAGING: ${{ secrets.KOSLI_API_TOKEN_STAGING }} approve-deployment-to-prod: @@ -334,4 +333,3 @@ jobs: IMAGE_TAG: ${{ needs.kosli-trail.outputs.image_tag }} secrets: KOSLI_API_TOKEN: ${{ secrets.KOSLI_API_TOKEN }} - KOSLI_API_TOKEN_STAGING: ${{ secrets.KOSLI_API_TOKEN_STAGING }} \ No newline at end of file diff --git a/.github/workflows/main_staging.yml b/.github/workflows/main_staging.yml deleted file mode 100644 index ed4fcb3d..00000000 --- a/.github/workflows/main_staging.yml +++ /dev/null @@ -1,375 +0,0 @@ -name: Main - reports Trails to https://staging.app.kosli.com - -on: - push: - branches: - - main - -env: - KOSLI_DRY_RUN: ${{ vars.KOSLI_DRY_RUN }} # False - KOSLI_HOST: ${{ vars.KOSLI_HOST_STAGING }} # https://staging.app.kosli.com - KOSLI_ORG: ${{ vars.KOSLI_ORG }} # cyber-dojo - KOSLI_FLOW: ${{ vars.KOSLI_FLOW }} # saver-ci - KOSLI_API_TOKEN: ${{ secrets.KOSLI_API_TOKEN_STAGING }} - KOSLI_TRAIL: ${{ github.sha }} - SERVICE_NAME: ${{ github.event.repository.name }} # saver - -jobs: - - kosli-trail: - runs-on: ubuntu-latest - outputs: - image_tag: ${{ steps.variables.outputs.image_tag }} - image_name: ${{ steps.variables.outputs.image_name }} - steps: - - uses: actions/checkout@v4 - - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Create Kosli Flow - run: - kosli create flow "${{ env.KOSLI_FLOW }}" - --description="Group/Kata model+persistence" - --template-file=.kosli.yml - - - name: Begin Kosli Trail - run: - kosli begin trail "${{ env.KOSLI_TRAIL }}" - --description="${{ github.actor }} - $(git log -1 --pretty=%B)" - - - name: Set outputs - id: variables - run: | - IMAGE_TAG=${GITHUB_SHA:0:7} - echo "image_tag=${IMAGE_TAG}" >> ${GITHUB_OUTPUT} - echo "image_name=cyberdojo/${{ env.SERVICE_NAME }}:${IMAGE_TAG}" >> ${GITHUB_OUTPUT} - - - pull-request: - needs: [kosli-trail] - runs-on: ubuntu-latest - permissions: - id-token: write - contents: write - pull-requests: read - steps: - - uses: actions/checkout@v4 - - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Report pull-request evidence to Kosli Trail - run: - kosli attest pullrequest github - --github-token=${{ secrets.GITHUB_TOKEN }} - --name=saver.pull-request - - -# lint: -# needs: [kosli-trail] -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v4 -# -# - uses: ruby/setup-ruby@v1 -# with: -# ruby-version: 3.2.0 -# bundler-cache: true -# -# - name: Setup Kosli CLI -# uses: kosli-dev/setup-cli-action@v2 -# with: -# version: ${{ vars.KOSLI_CLI_VERSION }} -# -# - name: Run Rubocop linter on source, attest results to Kosli Trail -# env: -# KOSLI_ATTACHMENTS: /tmp/kosli_attachments -# run: | -# mkdir -p "${KOSLI_ATTACHMENTS}" -# set +e -# make lint | tee "${KOSLI_ATTACHMENTS}"/rubocop.log -# STATUS=${PIPESTATUS[0]} -# set -e -# -# KOSLI_COMPLIANT=$([ ${STATUS} = 0 ] && echo true || echo false) -# cp .rubocop.yml "${KOSLI_ATTACHMENTS}" -# kosli attest generic \ -# --attachments="${KOSLI_ATTACHMENTS}" \ -# --compliant="${KOSLI_COMPLIANT}" \ -# --name=saver.lint -# exit ${STATUS} - - - wait-for-image: - needs: [kosli-trail] - runs-on: ubuntu-latest - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - outputs: - kosli_fingerprint: ${{ steps.variables.outputs.kosli_fingerprint }} - steps: - - uses: actions/checkout@v4 - - - name: Wait for image to be built in main.yml - run: - ./sh/wait_for_image.sh "${IMAGE_NAME}" - - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Attest image to Kosli Trail - run: - kosli attest artifact "${IMAGE_NAME}" - --artifact-type=docker - --name=saver - - - name: Set outputs - id: variables - run: | - FINGERPRINT=$(kosli fingerprint "${IMAGE_NAME}" --artifact-type=docker) - echo "kosli_fingerprint=${FINGERPRINT}" >> ${GITHUB_OUTPUT} - - - unit-tests: - needs: [wait-for-image, kosli-trail] - runs-on: ubuntu-latest - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - KOSLI_FINGERPRINT: ${{ needs.wait-for-image.outputs.kosli_fingerprint }} - steps: - - uses: actions/checkout@v4 - - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Run tests with branch-coverage - run: | - make test - kosli attest generic "${IMAGE_NAME}" \ - --attachments=./tmp/coverage \ - --description="server & client branch-coverage" \ - --name=saver.branch-coverage \ - --user-data=./tmp/evidence.json - - - snyk-container-scan: - needs: [wait-for-image, kosli-trail] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Setup Snyk - uses: snyk/actions/setup@master - - - name: Run Snyk container scan and report results to Kosli Trail - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - KOSLI_FINGERPRINT: ${{ needs.wait-for-image.outputs.kosli_fingerprint }} - KOSLI_ATTACHMENTS: /tmp/kosli_attachments - SARIF_FILENAME: snyk.container.scan.json - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - run: | - set +e - snyk container test ${IMAGE_NAME} \ - --file=Dockerfile \ - --sarif \ - --sarif-file-output="${SARIF_FILENAME}" \ - --policy-path=.snyk - set -e - - mkdir "${KOSLI_ATTACHMENTS}" - cp .snyk "${KOSLI_ATTACHMENTS}" - - kosli attest snyk "${IMAGE_NAME}" \ - --name=saver.snyk-container-scan \ - --scan-results="${SARIF_FILENAME}" - - - snyk-code-scan: - needs: [wait-for-image, kosli-trail] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Setup Snyk - uses: snyk/actions/setup@master - - - name: Run Snyk code scan and report results to Kosli Trail - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - KOSLI_FINGERPRINT: ${{ needs.wait-for-image.outputs.kosli_fingerprint }} - KOSLI_ATTACHMENTS: /tmp/kosli_attachments - SARIF_FILENAME: snyk.code.scan.json - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - run: | - set +e - snyk code test \ - --sarif \ - --sarif-file-output="${SARIF_FILENAME}" \ - --policy-path=.snyk \ - . - set -e - - mkdir "${KOSLI_ATTACHMENTS}" - cp .snyk "${KOSLI_ATTACHMENTS}" - - kosli attest snyk "${IMAGE_NAME}" \ - --name=saver.snyk-code-scan \ - --scan-results="${SARIF_FILENAME}" - - - sdlc-control-gate: - needs: [pull-request, unit-tests, snyk-container-scan, snyk-code-scan, kosli-trail, wait-for-image] - runs-on: ubuntu-latest - steps: - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Kosli SDLC gate to short-circuit the Trail - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - KOSLI_FINGERPRINT: ${{ needs.wait-for-image.outputs.kosli_fingerprint }} - run: - kosli assert artifact ${IMAGE_NAME} - - - approve-deployment-to-beta: - needs: [sdlc-control-gate, kosli-trail, wait-for-image] - runs-on: ubuntu-latest - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - KOSLI_FINGERPRINT: ${{ needs.wait-for-image.outputs.kosli_fingerprint }} - KOSLI_ENVIRONMENT: aws-beta - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Report approval of deployment to Kosli - run: - kosli report approval ${IMAGE_NAME} - --approver="${{ github.actor }}" - - - wait-for-deploy-to-beta: - needs: [approve-deployment-to-beta, kosli-trail] - runs-on: ubuntu-latest - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - KOSLI_ENVIRONMENT: aws-beta - steps: - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - uses: actions/checkout@v4 - - - name: Wait for deployment to aws-beta in main.yml - run: - ./sh/wait_for_deployment.sh - "${IMAGE_NAME}" - "${{ env.KOSLI_HOST }}" - "${{ env.KOSLI_API_TOKEN }}" - "${{ env.KOSLI_ORG }}" - "${KOSLI_ENVIRONMENT}" - - - approve-deployment-to-prod: - needs: [wait-for-deploy-to-beta, kosli-trail, wait-for-image] - runs-on: ubuntu-latest - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - KOSLI_FINGERPRINT: ${{ needs.wait-for-image.outputs.kosli_fingerprint }} - KOSLI_ENVIRONMENT: aws-prod - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - name: Report approval of deployment to Kosli - run: - kosli report approval ${IMAGE_NAME} - --approver="${{ github.actor }}" - - - wait-for-deploy-to-prod: - needs: [approve-deployment-to-prod, kosli-trail] - runs-on: ubuntu-latest - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - KOSLI_ENVIRONMENT: aws-prod - steps: - - name: Setup Kosli CLI - uses: kosli-dev/setup-cli-action@v2 - with: - version: ${{ vars.KOSLI_CLI_VERSION }} - - - uses: actions/checkout@v4 - - - name: Wait for deployment to aws-prod in main.yml - run: - ./sh/wait_for_deployment.sh - "${IMAGE_NAME}" - "${{ env.KOSLI_HOST }}" - "${{ env.KOSLI_API_TOKEN }}" - "${{ env.KOSLI_ORG }}" - "${KOSLI_ENVIRONMENT}" - - - # The cyberdojo/versioner refresh-env.sh script - # https://github.com/cyber-dojo/versioner/blob/master/sh/refresh-env.sh - # relies on being able to: - # - get the :latest image - # - extract the SHA env-var embedded inside it - # - use the 1st 7 chars of the SHA as a latest-equivalent tag - - push-latest: - needs: [wait-for-deploy-to-prod, kosli-trail] - runs-on: ubuntu-latest - env: - IMAGE_NAME: ${{ needs.kosli-trail.outputs.image_name }} - steps: - - uses: actions/checkout@v4 - - - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USER }} - password: ${{ secrets.DOCKER_PASS }} - - - name: Tag image to :latest and push to Dockerhub Registry - run: | - docker pull "${IMAGE_NAME}" - docker tag "${IMAGE_NAME}" cyberdojo/${{ env.SERVICE_NAME }}:latest - docker push cyberdojo/${{ env.SERVICE_NAME }}:latest diff --git a/.github/workflows/readme.md b/.github/workflows/readme.md deleted file mode 100644 index f10be0cb..00000000 --- a/.github/workflows/readme.md +++ /dev/null @@ -1,24 +0,0 @@ - -# main.yml -Reports to https://app.kosli.com -The workflow to look in if you want to learn about Kosli. - -# main_staging.yml -Reports to https://staging.app.kosli.com -A workflow for Kosli internal development purposes. -When showing CI workflows in Kosli demos, there is a tension created -by the fact that cyber-dojo Flows are unusual in that they need to -repeat every Kosli step twice; once to report to https://app.kosli.com -and once again to report to https://staging.app.kosli.com -A normal Kosli customer CI workflow yml file would only report to the former. -To resolve this, a git push triggers the two workflows. - -This is basically the same as main.yml but it does NOT... -- rebuild the docker image (since the build is not binary reproducible) -- deploy the image to aws-beta/aws-prod (since main.yml already does that) -It _does_ however re-run the test evidence so it is possible (eg if the unit-tests are flaky) -to get the run from main.yml to report a compliant Artifact and do deployments to aws-beta and -aws-prod but the run from main_staging.yml to report the same Artifact as non-compliant. -In this situation, the Environment report for staging will see the Artifact deployment -from 1)main.yml and so, in staging, the Artifact will appear as non-compliant in its snapshot. - diff --git a/.github/workflows/sub_deploy_to_beta.yml b/.github/workflows/sub_deploy_to_beta.yml index ccd67f10..bcb521ff 100644 --- a/.github/workflows/sub_deploy_to_beta.yml +++ b/.github/workflows/sub_deploy_to_beta.yml @@ -7,16 +7,13 @@ on: required: true type: string secrets: - KOSLI_API_TOKEN_STAGING: - required: true KOSLI_API_TOKEN: required: true env: KOSLI_DRY_RUN: ${{ vars.KOSLI_DRY_RUN }} # False - KOSLI_HOST: "https://app.kosli.com" - KOSLI_HOST_STAGING: "https://staging.app.kosli.com" + KOSLI_HOST: ${{ vars.KOSLI_HOST }} # https://app.kosli.com KOSLI_ORG: ${{ vars.KOSLI_ORG }} # cyber-dojo KOSLI_FLOW: ${{ vars.KOSLI_FLOW }} # saver-ci KOSLI_TRAIL: ${{ github.sha }} @@ -120,7 +117,7 @@ jobs: with: name: tf_artifacts_state_file_beta - - name: Attest tf plan to Kosli trail (production) + - name: Attest tf plan to Kosli trail run: kosli attest generic --name tf-apply-plan-beta @@ -130,16 +127,6 @@ jobs: --host ${{ env.KOSLI_HOST }} --api-token ${{ secrets.KOSLI_API_TOKEN }} - - name: Attest tf plan to Kosli trail (staging) - run: - kosli attest generic - --name tf-apply-plan-beta - --flow ${{ env.KOSLI_FLOW }} - --trail ${{ env.KOSLI_TRAIL }} - --attachments ./tfplan - --host ${{ env.KOSLI_HOST_STAGING }} - --api-token ${{ secrets.KOSLI_API_TOKEN_STAGING }} - - name: Delete tf plan artifact run: | # Get the list of artifacts @@ -157,7 +144,7 @@ jobs: -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/${{ github.repository}}/actions/artifacts/${artifact_id} - - name: Attest tf state artifact (production) + - name: Attest tf state artifact run: | kosli attest artifact \ --artifact-type file ./${{ needs.variables.outputs.service_name }}.tfstate \ @@ -167,16 +154,6 @@ jobs: --host ${{ env.KOSLI_HOST }} \ --api-token ${{ secrets.KOSLI_API_TOKEN }} - - name: Attest tf state artifact (staging) - run: | - kosli attest artifact \ - --artifact-type file ./${{ needs.variables.outputs.service_name }}.tfstate \ - --name state-beta \ - --flow ${{ env.KOSLI_FLOW }} \ - --trail ${{ env.KOSLI_TRAIL }} \ - --host ${{ env.KOSLI_HOST_STAGING }} \ - --api-token ${{ secrets.KOSLI_API_TOKEN_STAGING }} - - name: Delete tf state file artifact run: | # Get the list of artifacts diff --git a/.github/workflows/sub_deploy_to_prod.yml b/.github/workflows/sub_deploy_to_prod.yml index 2b464a9a..48ca78ae 100644 --- a/.github/workflows/sub_deploy_to_prod.yml +++ b/.github/workflows/sub_deploy_to_prod.yml @@ -7,16 +7,13 @@ on: required: true type: string secrets: - KOSLI_API_TOKEN_STAGING: - required: true KOSLI_API_TOKEN: required: true env: KOSLI_DRY_RUN: ${{ vars.KOSLI_DRY_RUN }} # False - KOSLI_HOST: "https://app.kosli.com" - KOSLI_HOST_STAGING: "https://staging.app.kosli.com" + KOSLI_HOST: ${{ vars.KOSLI_HOST }} # https://app.kosli.com KOSLI_ORG: ${{ vars.KOSLI_ORG }} # cyber-dojo KOSLI_FLOW: ${{ vars.KOSLI_FLOW }} # saver-ci KOSLI_TRAIL: ${{ github.sha }} @@ -93,7 +90,7 @@ jobs: with: name: tf_artifacts_state_file_prod - - name: Attest tf plan to Kosli trail (production) + - name: Attest tf plan to Kosli trail run: kosli attest generic --name tf-apply-plan-prod @@ -103,16 +100,6 @@ jobs: --host ${{ env.KOSLI_HOST }} --api-token ${{ secrets.KOSLI_API_TOKEN }} - - name: Attest tf plan to Kosli trail (staging) - run: - kosli attest generic - --name tf-apply-plan-prod - --flow ${{ env.KOSLI_FLOW }} - --trail ${{ env.KOSLI_TRAIL }} - --attachments ./tfplan - --host ${{ env.KOSLI_HOST_STAGING }} - --api-token ${{ secrets.KOSLI_API_TOKEN_STAGING }} - - name: Delete tf plan artifact run: | # Get the list of artifacts @@ -130,7 +117,7 @@ jobs: -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/${{ github.repository}}/actions/artifacts/${artifact_id} - - name: Attest tf state artifact (production) + - name: Attest tf state artifact run: | kosli attest artifact \ --artifact-type file ./${{ needs.variables.outputs.service_name }}.tfstate \ @@ -140,16 +127,6 @@ jobs: --host ${{ env.KOSLI_HOST }} \ --api-token ${{ secrets.KOSLI_API_TOKEN }} - - name: Attest tf state artifact (staging) - run: | - kosli attest artifact \ - --artifact-type file ./${{ needs.variables.outputs.service_name }}.tfstate \ - --name state-prod \ - --flow ${{ env.KOSLI_FLOW }} \ - --trail ${{ env.KOSLI_TRAIL }} \ - --host ${{ env.KOSLI_HOST_STAGING }} \ - --api-token ${{ secrets.KOSLI_API_TOKEN_STAGING }} - - name: Delete tf state file artifact run: | # Get the list of artifacts diff --git a/.kosli.yml b/.kosli.yml index 7f9d0c96..901bb94f 100644 --- a/.kosli.yml +++ b/.kosli.yml @@ -1,11 +1,12 @@ version: 1 trail: + attestations: + - name: pull-request + type: pull_request artifacts: - name: saver attestations: - - name: pull-request - type: pull_request - name: snyk-container-scan type: snyk - name: snyk-code-scan diff --git a/sh/wait_for_deployment.sh b/sh/wait_for_deployment.sh deleted file mode 100755 index ba32be11..00000000 --- a/sh/wait_for_deployment.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash -set -Eu - -IMAGE_NAME="${1}" # eg cyberdojo/saver:6d650d5 -KOSLI_HOST="${2}" # eg https://app.kosli.com -KOSLI_API_TOKEN="${3}" # eg 7654y432er7132rwaefdgzfvdc (fake) -KOSLI_ORG="${4}" # eg cyber-dojo -KOSLI_ENVIRONMENT="${5}" # eg aws-prod - -image_deployed() -{ - local -r snapshot_json_filename=snapshot.json - - # Use Kosli CLI to get info on what artifacts are currently running - # (docs/snapshot.json contains an example json file) - echo "Getting snapshot from ${KOSLI_ENVIRONMENT} on ${KOSLI_HOST}" - - kosli get snapshot "${KOSLI_ENVIRONMENT}" \ - --host="${KOSLI_HOST}" \ - --api-token="${KOSLI_API_TOKEN}" \ - --org="${KOSLI_ORG}" \ - --output=json \ - > "${snapshot_json_filename}" - - # Process info, one artifact at a time - local -r artifacts_length=$(jq '.artifacts | length' ${snapshot_json_filename}) - for i in $(seq 0 $(( artifacts_length - 1 ))); - do - annotation_type=$(jq -r ".artifacts[$i].annotation.type" ${snapshot_json_filename}) - if [ "${annotation_type}" != "exited" ]; then - name=$(jq -r ".artifacts[$i].name" ${snapshot_json_filename}) - fingerprint=$(jq -r ".artifacts[$i].fingerprint" ${snapshot_json_filename}) - echo "Looking at Artifact ${name}" - if [ "${fingerprint}" == "${FINGERPRINT}" ]; then - echo "MATCHED: ${fingerprint} == ${FINGERPRINT}" - return 0 # true - else - echo "NO-MATCH ${fingerprint} != ${FINGERPRINT}" - fi - fi - done - return 1 # false -} - -image_not_deployed() -{ - local -r snapshot_json_filename=snapshot.json - echo "Failed!" - cat "${snapshot_json_filename}" -} - -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -docker pull "${IMAGE_NAME}" -FINGERPRINT=$(kosli fingerprint "${IMAGE_NAME}" --artifact-type=docker) - -MAX_WAIT_TIME=15 # max time to wait for image to be deployed, in minutes -SLEEP_TIME=20 # wait time between deployment checks, in seconds -MAX_ATTEMPTS=$(( MAX_WAIT_TIME * 60 / SLEEP_TIME )) -ATTEMPTS=1 - -until image_deployed -do - sleep 10 - [[ ${ATTEMPTS} -eq ${MAX_ATTEMPTS} ]] && image_not_deployed && exit 42 - ((ATTEMPTS++)) - echo "Waiting for deployment of Artifact ${IMAGE_NAME} to Environment ${KOSLI_ENVIRONMENT}" - echo "Attempt # ${ATTEMPTS} / ${MAX_ATTEMPTS}" -done -echo "Success: Artifact ${IMAGE_NAME} is running in Environment ${KOSLI_ENVIRONMENT}" -exit 0 diff --git a/sh/wait_for_image.sh b/sh/wait_for_image.sh deleted file mode 100755 index b3f3c61b..00000000 --- a/sh/wait_for_image.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -set -Eu - -readonly IMAGE_NAME="${1}" # eg cyberdojo/saver:756c728 -readonly MAX_WAIT_TIME=5 # max time to wait for IMAGE_NAME to be pushed, in minutes -readonly SLEEP_TIME=10 # wait time between pull checks, in seconds -readonly MAX_ATTEMPTS=$(( MAX_WAIT_TIME * 60 / SLEEP_TIME )) - -ATTEMPTS=1 - -until docker pull "${IMAGE_NAME}" -do - sleep ${SLEEP_TIME} - [[ ${ATTEMPTS} -eq ${MAX_ATTEMPTS} ]] && echo "Failed!" && exit 1 - ((ATTEMPTS++)) - echo "Waiting for ${IMAGE_NAME} to be pushed to its registry" - echo "Attempt # ${ATTEMPTS} / ${MAX_ATTEMPTS}" -done -echo "Success: Artifact ${IMAGE_NAME} has been pushed to its registry" -exit 0