# This workflow checks that Zebra's crates.io release script works. # # We use a separate action, because the changed files are different to a Continuous Deployment # or Docker release. # # This workflow is triggered when: # - A PR that changes Rust files, a README, or this workflow is opened or updated # - A change is pushed to the main branch # # TODO: # If we decide to automate crates.io releases, we can also publish crates using this workflow, when: # - A release is published # - A pre-release is changed to a release name: Release crates # Ensures that only one workflow task will run at a time. Previous releases, if # already in process, won't get cancelled. Instead, we let the first release complete, # then queue the latest pending workflow, cancelling any workflows in between. # # Since the different event types do very different things (test vs release), # we can run different event types concurrently. # # For pull requests, we only run the tests from this workflow, and don't do any releases. # So an in-progress pull request gets cancelled, just like other tests. concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} on: # disabled for now # release: # types: # - released # Only runs the release tests, doesn't release any crates. # # We test all changes on the main branch, just in case the PR paths are too strict. push: branches: - main pull_request: paths: # code and tests - '**/*.rs' # hard-coded checkpoints (and proptest regressions, which are not actually needed) - '**/*.txt' # dependencies - '**/Cargo.toml' - '**/Cargo.lock' # configuration files - '.cargo/config.toml' - '**/clippy.toml' # READMEs, which are shown on the crate page - '**/README.md' # workflow definitions - '.github/workflows/release-crates.io.yml' jobs: # Test that Zebra can be released to crates.io using `cargo`. # This checks that Zebra's dependencies and release configs are correct. check-release: name: Check crate release dry run timeout-minutes: 15 runs-on: ubuntu-latest steps: - uses: r7kamura/rust-problem-matchers@v1.4.0 - name: Checkout git repository uses: actions/checkout@v4.1.1 with: persist-credentials: false - name: Inject slug/short variables uses: rlespinasse/github-slug-action@v4 with: short-length: 7 # Setup Rust with stable toolchain and minimal profile - name: Setup Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=stable --profile=minimal - name: Install cargo-release uses: baptiste0928/cargo-install@v2.2.0 with: crate: cargo-release # Make sure Zebra can be released! # # These steps should be kept up to date with the release checklist. # - name: Crate release dry run run: | ./.github/workflows/scripts/release-crates-dry-run.sh # TODO: actually do the release here #release-crates: # name: Release Zebra Crates # needs: [ check-release ] # runs-on: ubuntu-latest # timeout-minutes: 30 # if: ${{ !cancelled() && !failure() && github.event_name == 'release' }} # steps: # ... failure-issue: name: Open or update issues for release crates failures # When a new job is added to this workflow, add it to this list. needs: [ check-release ] # Only open tickets for failed or cancelled jobs that are not coming from PRs. # (PR statuses are already reported in the PR jobs list, and checked by Mergify.) if: (failure() && github.event.pull_request == null) || (cancelled() && github.event.pull_request == null) runs-on: ubuntu-latest steps: - uses: jayqi/failed-build-issue-action@v1 with: title-template: "{{refname}} branch CI failed: {{eventName}} in {{workflow}}" # New failures open an issue with this label. label-name: S-ci-fail-release-crates-auto-issue # If there is already an open issue with this label, any failures become comments on that issue. always-create-new-issue: false github-token: ${{ secrets.GITHUB_TOKEN }}