Skip to content

release

release #37

Workflow file for this run

#
# .github/workflows/release.yml
#
---
name: release
defaults:
run:
# Prefixes all `run` commands with the following command to force them to run outside Rosetta.
shell: arch -arm64 bash --noprofile --norc -eo pipefail {0}
on:
release:
types: [published]
jobs:
start:
runs-on: macos-14
steps:
# Logs event details and sets `DRY_RUN` env var
# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable
# https://docs.github.com/en/webhooks/webhook-events-and-payloads?actionType=published#release
- name: 🔈 Log release event
# This step will only run for a real 'release' event.
if: ${{ github.event.release.name != '' }}
run: |
echo "Triggered by a release publication event (wet run)"
echo "release.name: ${{ github.event.release.name }}"
echo "release.tag_name: ${{ github.event.release.tag_name }}"
echo "release.target_commitish: ${{ github.event.release.target_commitish }}"
echo -e "release.body: \n${{ github.event.release.body }}"
echo "DRY_RUN=false" >>$GITHUB_ENV
echo "MAS_VERSION=${{ github.event.release.tag_name }}" >>${GITHUB_ENV}
echo "RELEASE_BRANCH=releases/release-${{ github.event.release.tag_name }}" >>${GITHUB_ENV}
echo "RELEASE_COMMIT=${{ github.event.release.target_commitish }}" >>${GITHUB_ENV}
- name: 🔈 Log environment variables
env:
DRY_RUN: ${{ env.DRY_RUN }}
MAS_VERSION: ${{ env.MAS_VERSION }}
RELEASE_BRANCH: ${{ env.RELEASE_BRANCH }}
RELEASE_COMMIT: ${{ env.RELEASE_COMMIT }}
run: |
echo "DRY_RUN: ${DRY_RUN}"
echo "MAS_VERSION: ${MAS_VERSION}"
echo "RELEASE_BRANCH: ${RELEASE_BRANCH}"
echo "RELEASE_COMMIT: ${RELEASE_COMMIT}"
prepare-release:
runs-on: macos-14
needs: [start]
steps:
- uses: actions/checkout@v4
with:
# A fetch-depth of 0 includes all history and tags for script/version
fetch-depth: 0
- name: 🔀 Create release branch
env:
RELEASE_BRANCH: ${{ env.RELEASE_BRANCH }}
run: |
git branch "${RELEASE_BRANCH}"
git switch "${RELEASE_BRANCH}"
- name: 🔖 Update version
env:
MAS_VERSION: ${{ env.MAS_VERSION }}
RELEASE_COMMIT: ${{ env.RELEASE_COMMIT }}
run: |
script/version_bump "${MAS_VERSION}" "${RELEASE_COMMIT}"
- name: 💾 Commit changes
env:
MAS_VERSION: ${{ env.MAS_VERSION }}
run: |
git add \
"Homebrew/mas.rb" \
"Homebrew/mas-tap.rb" \
"Sources/MasKit/Package.swift"
git commit \
--message="🔖 Version ${MAS_VERSION}"
- name: ⤴️ Open PR
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
MAS_VERSION: ${{ env.MAS_VERSION }}
RELEASE_BRANCH: ${{ env.RELEASE_BRANCH }}
run: |
gh pr create \
--base main \
--head "${RELEASE_BRANCH}" \
--title "🔖 Version ${MAS_VERSION}" \
--body "This PR contains the changes from releasing version [${MAS_VERSION}](https://github.com/mas-cli/mas/releases/tag/${MAS_VERSION})."
pkg-installer:
runs-on: macos-14
needs: [prepare-release]
steps:
- uses: actions/checkout@v4
with:
# A fetch-depth of 0 includes all history and tags for script/version
fetch-depth: 0
- name: 👢 Bootstrap
run: |
script/bootstrap -f
# Important to trigger a universal build first as package just works with
# the `mas` binary in finds in the build dir.
- name: 🏗️ Build Universal
run: |
script/build --universal
- name: 📦 macOS Package
run: |
script/package
- name: 🚀 Upload mas.pkg
env:
DRY_RUN: ${{ env.DRY_RUN }}
MAS_VERSION: ${{ env.MAS_VERSION }}
if: ${{ env.DRY_RUN == 'false' }}
run: |
gh release upload ${MAS_VERSION} \
.build/mas.pkg
homebrew-tap:
runs-on: macos-14
needs: [prepare-release]
steps:
- uses: actions/checkout@v4
with:
# A fetch-depth of 0 includes all history and tags for script/version
fetch-depth: 0
- name: 👢 Bootstrap
run: |
script/bootstrap -f
- name: 🚰 Update mas tap formula
env:
DRY_RUN: ${{ env.DRY_RUN }}
MAS_VERSION: ${{ env.MAS_VERSION }}
run: |
DRY_RUN=${DRY_RUN} \
script/brew_tap_update ${MAS_VERSION}
- name: 🚀 Upload Bottles
env:
DRY_RUN: ${{ env.DRY_RUN }}
MAS_VERSION: ${{ env.MAS_VERSION }}
if: ${{ env.DRY_RUN == 'false' }}
run: |
gh release upload ${MAS_VERSION} \
.build/bottles/mas-*.bottle.tar.gz
homebrew-core:
runs-on: macos-14
needs: [prepare-release, homebrew-tap]
steps:
- uses: actions/checkout@v4
with:
# A fetch-depth of 0 includes all history and tags for script/version
fetch-depth: 0
- name: 👢 Bootstrap
run: |
script/bootstrap -f
- name: 🍺 Update Homebrew mas formula
env:
DRY_RUN: ${{ env.DRY_RUN }}
MAS_VERSION: ${{ env.MAS_VERSION }}
run: |
DRY_RUN=${DRY_RUN} \
script/brew_core_update ${MAS_VERSION}