From 0abf6acbd9ed3c12d4c47fde4985db5a6de5fb37 Mon Sep 17 00:00:00 2001 From: "Garen J. Torikian" Date: Wed, 21 Jan 2026 16:56:07 -0500 Subject: [PATCH] Automate release workflow --- .github/workflows/release.yml | 68 +++++++++++++++++++++++++ .github/workflows/version-bump.yml | 80 ++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/version-bump.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a7930b6 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,68 @@ +name: Release + +on: + pull_request: + types: [closed] + branches: [main] + +defaults: + run: + shell: bash + +jobs: + create-release: + name: Create GitHub Release + if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'version-bump') + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Generate token + id: generate-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ vars.WORKOS_BOT_APP_ID }} + private-key: ${{ secrets.WORKOS_BOT_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@v4 + with: + token: ${{ steps.generate-token.outputs.token }} + + - name: Get version from mix.exs + id: get-version + run: | + VERSION=$(grep '@version "' mix.exs | sed 's/.*@version "\(.*\)"/\1/') + echo "version=$VERSION" >> $GITHUB_OUTPUT + + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ steps.get-version.outputs.version }} + name: v${{ steps.get-version.outputs.version }} + generate_release_notes: true + token: ${{ steps.generate-token.outputs.token }} + + publish: + name: Publish to Hex + needs: create-release + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Elixir and Erlang + uses: erlef/setup-beam@5304e04ea2b355f03681464e683d92e3b2f18451 # v1.18.2 + with: + elixir-version: '1.15' + otp-version: '26.0' + + - name: Install dependencies + run: mix deps.get + + - name: Publish to Hex + run: mix hex.publish --yes + env: + HEX_API_KEY: ${{ secrets.HEX_API_KEY }} diff --git a/.github/workflows/version-bump.yml b/.github/workflows/version-bump.yml new file mode 100644 index 0000000..38221e4 --- /dev/null +++ b/.github/workflows/version-bump.yml @@ -0,0 +1,80 @@ +name: Version Bump + +on: + workflow_dispatch: + inputs: + bump_type: + description: "Version bump type" + required: true + type: choice + options: + - patch + - minor + - major + +jobs: + bump-version: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Generate token + id: generate-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ vars.WORKOS_BOT_APP_ID }} + private-key: ${{ secrets.WORKOS_BOT_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@v4 + with: + token: ${{ steps.generate-token.outputs.token }} + + - name: Configure Git + run: | + git config user.name "workos-bot[bot]" + git config user.email "workos-bot[bot]@users.noreply.github.com" + + - name: Read current version + id: current-version + run: | + CURRENT_VERSION=$(grep '@version "' mix.exs | sed 's/.*@version "\(.*\)"/\1/') + echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + + - name: Bump version + id: bump-version + run: | + CURRENT_VERSION="${{ steps.current-version.outputs.version }}" + IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" + + case "${{ github.event.inputs.bump_type }}" in + major) + NEW_VERSION="$((MAJOR + 1)).0.0" + ;; + minor) + NEW_VERSION="$MAJOR.$((MINOR + 1)).0" + ;; + patch) + NEW_VERSION="$MAJOR.$MINOR.$((PATCH + 1))" + ;; + esac + + echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT + + - name: Update version in mix.exs + run: | + sed -i 's/@version ".*"/@version "${{ steps.bump-version.outputs.new_version }}"/' mix.exs + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ steps.generate-token.outputs.token }} + commit-message: "v${{ steps.bump-version.outputs.new_version }}" + title: "v${{ steps.bump-version.outputs.new_version }}" + body: | + Bumps version from ${{ steps.current-version.outputs.version }} to ${{ steps.bump-version.outputs.new_version }}. + + This PR was automatically created by the version-bump workflow. + branch: version-bump-${{ steps.bump-version.outputs.new_version }} + labels: version-bump