From aad164a5311b0a6d6d3f752a87ed385d5f0c1962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Orhun=20Parmaks=C4=B1z?= Date: Sat, 5 Aug 2023 16:41:07 +0200 Subject: [PATCH] feat(release): add automated nightly releases (#359) * feat(release): add automated nightly releases * refactor(release): rename the alpha workflow * refactor(release): simplify the release calculation --- .github/workflows/cd.yml | 71 ++++++++++++++++++++++++++++++++++++++-- Cargo.toml | 2 +- 2 files changed, 69 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index f61e3603..2001e59c 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -1,18 +1,83 @@ name: Continuous Deployment on: + workflow_dispatch: + schedule: + # At 00:00 on Saturday + # https://crontab.guru/#0_0_*_*_6 + - cron: "0 0 * * 6" push: tags: - "v*.*.*" +defaults: + run: + shell: bash + jobs: - publish: - name: Publish on crates.io + publish-alpha: + name: Create an alpha release runs-on: ubuntu-latest + if: ${{ !startsWith(github.event.ref, 'refs/tags/v') }} steps: - name: Checkout the repository uses: actions/checkout@v3 - - name: Publish + with: + fetch-depth: 0 + + - name: Calculate the next release + run: | + suffix="alpha" + last_tag="$(git describe --abbrev=0 --tags `git rev-list --tags --max-count=1`)" + if [[ "${last_tag}" = *"-${suffix}"* ]]; then + # increment the alpha version + # e.g. v0.22.1-alpha.12 -> v0.22.1-alpha.13 + alpha="${last_tag##*-${suffix}.}" + next_alpha="$((alpha + 1))" + next_tag="${last_tag/%${alpha}/${next_alpha}}" + else + # increment the patch and start the alpha version from 0 + # e.g. v0.22.0 -> v0.22.1-alpha.0 + patch="${last_tag##*.}" + next_patch="$((patch + 1))" + next_tag="${last_tag/%${patch}/${next_patch}}-${suffix}.0" + fi + # update the crate version + msg="# crate version" + sed -E -i "s/^version = .* ${msg}$/version = \"${next_tag#v}\" ${msg}/" Cargo.toml + echo "NEXT_TAG=${next_tag}" >> $GITHUB_ENV + echo "Next alpha release: ${next_tag} 🐭" + + - name: Publish on crates.io + uses: actions-rs/cargo@v1 + with: + command: publish + args: --allow-dirty --token ${{ secrets.CARGO_TOKEN }} + + - name: Generate a changelog + uses: orhun/git-cliff-action@v2 + with: + config: cliff.toml + args: --unreleased --tag ${{ env.NEXT_TAG }} --strip header + env: + OUTPUT: BODY.md + + - name: Publish on GitHub + uses: ncipollo/release-action@v1 + with: + tag: ${{ env.NEXT_TAG }} + prerelease: true + bodyFile: BODY.md + + publish-stable: + name: Create a stable release + runs-on: ubuntu-latest + if: ${{ startsWith(github.event.ref, 'refs/tags/v') }} + steps: + - name: Checkout the repository + uses: actions/checkout@v3 + + - name: Publish on crates.io uses: actions-rs/cargo@v1 with: command: publish diff --git a/Cargo.toml b/Cargo.toml index cfd9adab..cda2858a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ratatui" -version = "0.22.0" +version = "0.22.0" # crate version authors = ["Florian Dehau ", "The Ratatui Developers"] description = "A library to build rich terminal user interfaces or dashboards" documentation = "https://docs.rs/ratatui/latest/ratatui/"