diff --git a/.github/workflows/dry-run-release.yml b/.github/workflows/dry-run-release.yml new file mode 100644 index 0000000000..08c56a2cd1 --- /dev/null +++ b/.github/workflows/dry-run-release.yml @@ -0,0 +1,44 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +# This workflow performs a dry run for smithy-rs release. It can be triggered via either cron or manually. +# When ran, it only produces release artifacts, but will not cut a release tag in GitHub or publish to crates.io. + +name: Smithy-rs dry run release +run-name: ${{ github.workflow }} ${{ inputs.commit_sha == '' && 'scheduled' || (inputs.commit_sha) }} +on: + schedule: + # Runs 00:00 UTC every day + - cron: 0 0 * * * + workflow_dispatch: + inputs: + commit_sha: + description: | + Commit SHA: The SHA of the git commit that you want to release. + You must use the non-abbreviated SHA (e.g. b2318b0 won't work!). + Alternatively, you can use the name of a branch. + required: true + type: string + +jobs: + smithy-rs-manual-dry-run-release: + name: Manual dry run release + if: ${{ github.event_name == 'workflow_dispatch' }} + uses: ./.github/workflows/release.yml + with: + commit_sha: ${{ inputs.commit_sha }} + dry_run: true + secrets: + RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }} + RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }} + + smithy-rs-scheduled-dry-run-release: + name: Scheduled dry run release + if: ${{ github.event_name == 'schedule' }} + uses: ./.github/workflows/release.yml + with: + commit_sha: main + dry_run: true + secrets: + RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }} + RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }} diff --git a/.github/workflows/prod-release.yml b/.github/workflows/prod-release.yml new file mode 100644 index 0000000000..2192f4420e --- /dev/null +++ b/.github/workflows/prod-release.yml @@ -0,0 +1,29 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +# This workflow performs a production smithy-rs release. It will cut a release tag in GitHub and publish to crates.io. +# It is idempotent (e.g. won't publish the same crates to crates.io twice), so we can run it repeatedly until it succeeds. + +name: Smithy-rs prod release +run-name: ${{ github.workflow }} (${{ inputs.commit_sha }}) +on: + workflow_dispatch: + inputs: + commit_sha: + description: | + Commit SHA: The SHA of the git commit that you want to release. + You must use the non-abbreviated SHA (e.g. b2318b0 won't work!). + Alternatively, you can use the name of a branch. + required: true + type: string + +jobs: + smithy-rs-prod-release: + name: Prod release + uses: ./.github/workflows/release.yml + with: + commit_sha: ${{ inputs.commit_sha }} + dry_run: false + secrets: + RELEASE_AUTOMATION_BOT_PAT: ${{ secrets.RELEASE_AUTOMATION_BOT_PAT }} + RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN: ${{ secrets.RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 65934b422f..24a311e5a2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,8 +1,8 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 -# This workflow performs a release of smithy-rs. It is manually -# kicked off via GitHub Actions workflow dispatch. +# This is the shared release workflow run by both `prod-release.yml` and `dry-run-release.yml'. +# A calling workflow will indicate whether it wants to run this with a prod run or a dry run. # Allow only one release to run at a time concurrency: @@ -13,22 +13,22 @@ env: rust_version: 1.74.1 name: Release smithy-rs -run-name: ${{ inputs.dry_run && 'Dry run' || 'Prod run' }} - ${{ github.workflow }} (${{ inputs.commit_sha }}) on: - workflow_dispatch: + workflow_call: inputs: commit_sha: - description: | - Commit SHA: The SHA of the git commit that you want to release. - You must use the non-abbreviated SHA (e.g. b2318b0 won't work!). + description: The SHA of the git commit that you want to release. required: true type: string dry_run: - description: | - Dry run: When selected, it only produces release artifacts, but will not cut a release tag in GitHub or publish to crates.io + description: When true, it only produces release artifacts, but will not cut a release tag in GitHub or publish to crates.io. required: true type: boolean - default: true + secrets: + RELEASE_AUTOMATION_BOT_PAT: + required: true + RELEASE_AUTOMATION_BOT_CRATESIO_TOKEN: + required: true jobs: check-actor-for-prod-run: