diff --git a/.github/workflows/promote.yml b/.github/workflows/promote.yml index 37e7e3d9d6..0675778f7a 100644 --- a/.github/workflows/promote.yml +++ b/.github/workflows/promote.yml @@ -1,4 +1,46 @@ -# promote nightly to stable +# Create a PR that promotes the current main pre-release to the next stable release # -# runs the various git commands to update the version -# should be followed up by a stable release +# IE if the current master version is 0.4.0-rc.7, this will create a PR to promote it to 0.4.0 +# +# - update the version in the Cargo.toml to v0.4.0 +# - generate a v0.4 branch +# - push the branch to the repository +# - then bump 0.4.0-rc.1 to 0.5.0-rc.0 +# +# This means main will never be a "stable" release, and we can always merge breaking changes to main +# and backport them to the latest stable release +# +# This is configured to be ran manually, but could honestly just be a release workflow + +on: + workflow_dispatch: + +permissions: + actions: write + +jobs: + promote: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Publish the next pre-release + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + + # go from eg 0.4.0-rc.7 to 0.4.0, committing the change + cargo workspaces version -y minor + + # create a new branch for the release + RELEASE_BRANCH=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version') + RELEASE_BRANCH=v$(echo $RELEASE_BRANCH | sed 's/\.[0-9]*$//') + git branch $RELEASE_BRANCH + + # go from 0.4.0 to 0.5.0-rc.0 + cargo workspaces version -y preminor --pre-id rc + + # push the new branch to the repository + git push origin $RELEASE_BRANCH + + # push the new version to the repository + git push origin main diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 601be09b97..1cd8b1ae83 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -21,24 +21,22 @@ on: type: choice description: "Branch to publish" required: true - description: Choose the branch to publish. If the branch is main, it will publish a patch prerelease. - + description: Choose the branch to publish. options: - main - - v0.4.x - - v0.5.x - - v0.6.x - # todo: more stable releases as time goes on + - v0.4 + - v0.5 + - v0.6 env: - # make sure we have the right semver. + # make sure we have the right version # main is always a prepatch until we hit 1.0, and then this script needs to be updated # note that we need to promote the prepatch to a minor bump when we actually do a release # this means the version in git will always be one minor bump ahead of the actual release - basically meaning once # we release a version, it's fair game to merge breaking changes to main since all semver-compatible changes will be # backported automatically - SEMVER: ${{ github.event.inputs.channel == 'main' && 'prepatch' || 'patch' }} - PRERELEASE_TAG: ${{ github.event.inputs.channel == 'main' && '-prerelease' || '' }} + SEMVER: ${{ github.event.inputs.channel == 'main' && 'prerelease' || 'patch' }} + PRERELEASE_TAG: ${{ github.event.inputs.channel == 'main' && '-pre' || '' }} jobs: # First, run checks (clippy, tests, etc) and then publish the crates to crates.io @@ -77,7 +75,7 @@ jobs: run: | git config --global user.email "github-actions[bot]@users.noreply.github.com" git config --global user.name "github-actions[bot]" - cargo workspaces version -y ${{ env.SEMVER }} --no-git-commit + cargo workspaces version -y ${{ env.SEMVER }} --pre-id rc --no-git-commit # todo: actually just publish! # cargo workspaces publish -y ${{ github.event.inputs.semver }}