diff --git a/.github/scripts/split_spec.sh b/.github/scripts/split_spec.sh index a5d5742cb..09607ac74 100755 --- a/.github/scripts/split_spec.sh +++ b/.github/scripts/split_spec.sh @@ -1,16 +1,13 @@ #!/usr/bin/env bash set -eou pipefail -env_flag=${target_env:?} -if [[ ${env_flag} == "staging" ]]; then - env_flag="stage" -fi +echo "Running FOAS CLI versions command" +foascli versions -s openapi-foas.json -o ./openapi/v2/versions.json --env "${target_env:?}" -echo "Running FOAS CLI split command with the following --env=${env_flag} and -o=./openapi/v2/openapi.json" +echo "Running FOAS CLI split command with the following --env=${target_env:?} and -o=./openapi/v2/openapi.json" -foascli split -s openapi-foas.json --env "${env_flag}" -o ./openapi/v2/openapi.json +foascli split -s openapi-foas.json --env "${target_env:?}" -o ./openapi/v2/openapi.json mv -f "openapi-foas.json" "./openapi/v2.json" -foascli split -s openapi-foas.yaml --env "${env_flag}" -o ./openapi/v2/openapi.yaml +foascli split -s openapi-foas.yaml --env "${target_env:?}" -o ./openapi/v2/openapi.yaml mv -f "openapi-foas.yaml" "./openapi/v2.yaml" - diff --git a/.github/workflows/release-spec-prod.yml b/.github/workflows/release-spec-prod.yml deleted file mode 100644 index f23d6cba0..000000000 --- a/.github/workflows/release-spec-prod.yml +++ /dev/null @@ -1,106 +0,0 @@ -name: '(PROD) Release OpenAPI Spec' -on: - workflow_dispatch: {} - schedule: - - cron: '0 9 * * *' # Run at 9AM UTC -permissions: - contents: write - pull-requests: write - issues: write - -jobs: - generate-spec: - name: Generate the OpenAPI Spec - uses: ./.github/workflows/generate-openapi.yml - secrets: - api_bot_pat: ${{ secrets.API_BOT_PAT }} - aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }} - aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} - with: - aws_default_region: ${{ vars.AWS_DEFAULT_REGION}} - aws_s3_bucket: ${{ vars.S3_BUCKET_PROD}} - env: prod - - # Required validations will stop the release if they fail - run-required-validations: - name: Run Required Validations - needs: generate-spec - uses: ./.github/workflows/required-spec-validations.yml - secrets: - api_bot_pat: ${{ secrets.API_BOT_PAT }} - with: - spectral_version: ${{ vars.SPECTRAL_VERSION }} - env: prod - - # Optional validations won't stop the release but only open a GH issue if they fail - run-optional-validations: - name: Run Optional Validations - needs: generate-spec - uses: ./.github/workflows/optional-spec-validations.yml - secrets: - api_bot_pat: ${{ secrets.API_BOT_PAT }} - with: - spectral_version: ${{ vars.SPECTRAL_VERSION }} - env: prod - - release: - name: Release OpenAPI Spec - runs-on: ubuntu-latest - needs: [run-required-validations] - steps: - - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - - name: Install Go - uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 - with: - go-version-file: 'tools/cli/go.mod' - cache-dependency-path: "tools/cli/go.sum" - - name: Download openapi-foas - uses: actions/download-artifact@v4 - with: - name: openapi-foas-prod - github-token: ${{ secrets.api_bot_pat }} - run-id: ${{ github.run_id }} - - name: Build CLI - working-directory: tools/cli - run: make build && echo "$(pwd)/bin" >> "${GITHUB_PATH}" - - name: Run foascli split command - id: split - env: - target_env: "prod" - run: .github/scripts/split_spec.sh - - name: Create Issue - if: ${{ failure() && steps.split.outcome == 'failure' }} - uses: imjohnbo/issue-bot@572eed14422c4d6ca37e870f97e7da209422f5bd - with: - labels: failed-release - title: "(prod) Release: `foascli split` command failed :scream_cat:" - body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} - token: ${{ secrets.GITHUB_TOKEN }} - - name: Create branded_preview.html - working-directory: openapi - env: - target_env: "prod" - run: ../.github/scripts/branded_preview.sh - - name: Create Pull Request - uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c - id: create-pr - with: - token: ${{ secrets.GITHUB_TOKEN }} - title: "release: (prod) Release OpenAPI Spec :rocket:" - commit-message: "release: (PROD) Release OpenAPI Spec :rocket:" - delete-branch: true - branch: api-bot-update - labels: | - release - body: | - Automatic Release for MongoDB Atlas OpenAPI Specification. - PR contains autogenerated changes of the OpenAPI specification based on the latest services deployed in production. - - name: Create Issue - if: ${{ failure() && steps.create-pr.outcome == 'failure' }} - uses: imjohnbo/issue-bot@572eed14422c4d6ca37e870f97e7da209422f5bd - with: - labels: failed-release - title: "(prod) Release: `Create Pull Request` step failed :scream_cat:" - body: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} - token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release-spec-runner.yml b/.github/workflows/release-spec-runner.yml index 9e4b50173..90daa4cb2 100644 --- a/.github/workflows/release-spec-runner.yml +++ b/.github/workflows/release-spec-runner.yml @@ -1,4 +1,4 @@ -name: 'Release Runner: Start the Release Process for DEV, QA, and STAGING' +name: 'Release Runner: Start the Release Process for DEV, QA, STAGING and PROD' on: workflow_dispatch: {} schedule: @@ -20,6 +20,7 @@ jobs: aws_default_region: ${{ vars.AWS_DEFAULT_REGION}} aws_s3_bucket: ${{ vars.S3_BUCKET_DEV}} env: dev + branch: dev spectral_version: ${{ vars.SPECTRAL_VERSION }} foascli_version: ${{ vars.FOASCLI_VERSION }} release-spec-qa: @@ -33,6 +34,7 @@ jobs: aws_default_region: ${{ vars.AWS_DEFAULT_REGION}} aws_s3_bucket: ${{ vars.S3_BUCKET_QA}} env: qa + branch: qa spectral_version: ${{ vars.SPECTRAL_VERSION }} foascli_version: ${{ vars.FOASCLI_VERSION }} release-spec-staging: @@ -45,6 +47,21 @@ jobs: with: aws_default_region: ${{ vars.AWS_DEFAULT_REGION}} aws_s3_bucket: ${{ vars.S3_BUCKET_STAGING}} - env: staging + env: stage + branch: staging + spectral_version: ${{ vars.SPECTRAL_VERSION }} + foascli_version: ${{ vars.FOASCLI_VERSION }} + release-spec-prod: + name: Release OpenAPI Spec for PROD + uses: ./.github/workflows/release-spec.yml + secrets: + api_bot_pat: ${{ secrets.API_BOT_PAT }} + aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }} + aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} + with: + aws_default_region: ${{ vars.AWS_DEFAULT_REGION}} + aws_s3_bucket: ${{ vars.S3_BUCKET_PROD}} + env: prod + branch: main spectral_version: ${{ vars.SPECTRAL_VERSION }} foascli_version: ${{ vars.FOASCLI_VERSION }} diff --git a/.github/workflows/release-spec.yml b/.github/workflows/release-spec.yml index c179fdb76..404809d0d 100644 --- a/.github/workflows/release-spec.yml +++ b/.github/workflows/release-spec.yml @@ -14,6 +14,10 @@ on: description: 'Environment to generate the OpenAPI Spec for.' required: true type: string + branch: + description: 'Branch to release the OpenAPI Spec to.' + required: true + type: string spectral_version: description: 'Version of Spectral to use.' required: true @@ -77,7 +81,17 @@ jobs: - name: Checkout repository uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 with: - ref: ${{ inputs.env }} + ref: ${{ inputs.branch }} + - name: Upload current Specs and Changelog files + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a + with: + name: base-${{ inputs.env }} + retention-days: 1 + path: | + openapi/v2/openapi*.json + changelog/changelog.json + changelog/internal/changelog-all.json + changelog/internal/metadata.json - name: Download openapi-foas uses: actions/download-artifact@v4 with: @@ -118,10 +132,11 @@ jobs: uses: stefanzweifel/git-auto-commit-action@8621497c8c39c72f3e2a999a26b4ca1b5058a842 env: target_env: ${{ inputs.env }} + target_branch: ${{ inputs.branch }} with: commit_message: "(${{env.target_env}}) Release OpenAPI Spec :rocket:" commit_author: "github-actions[bot] " - branch: ${{env.target_env}} + branch: ${{env.target_branch}} file_pattern: "openapi/*" - name: Create Issue if: ${{ failure() && steps.commit.outcome == 'failure' }}