mas/.github/workflows/release.yml

249 lines
8.3 KiB
YAML
Raw Normal View History

2024-02-18 18:16:05 +00:00
#
# .github/workflows/release.yml
#
2024-02-18 19:13:42 +00:00
---
2024-02-18 18:16:05 +00:00
name: release
2024-03-10 18:24:09 +00:00
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}
2024-02-18 18:16:05 +00:00
on:
release:
types: [published]
jobs:
start:
runs-on: macos-15
outputs:
dry_run: ${{ steps.dry_run.outputs.dry_run }}
mas_version: ${{ steps.mas_version.outputs.mas_version }}
release_branch: ${{ steps.release_branch.outputs.release_branch }}
2024-02-18 18:16:05 +00:00
steps:
2024-03-09 19:32:04 +00:00
# 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
2024-03-09 19:32:04 +00:00
- name: 🔈 Log release event
# This step will only run for a real 'release' event.
2024-03-09 19:32:04 +00:00
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 }}"
2024-03-31 14:11:22 +00:00
echo -e "release.body: \n${{ github.event.release.body }}"
- id: dry_run
run: |
echo "DRY_RUN=false" >>"$GITHUB_OUTPUT"
- id: mas_version
run: |
echo "MAS_VERSION=${{ github.event.release.tag_name }}" >>"$GITHUB_OUTPUT"
- id: pre_release
run: |
echo "PRE_RELEASE=$(grep -q '-' <<<"$MAS_VERSION" && echo 'true' || echo 'false')" >>"$GITHUB_OUTPUT"
- id: release_branch
2024-03-09 19:32:04 +00:00
run: |
echo "RELEASE_BRANCH=releases/release-${{ github.event.release.tag_name }}" >>"$GITHUB_OUTPUT"
prepare-release:
runs-on: macos-15
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: 👢 Bootstrap
run: |
script/bootstrap -f
- name: 🔀 Create mas release branch
env:
RELEASE_BRANCH: ${{ needs.start.outputs.release_branch }}
run: |
2024-07-31 02:11:01 +00:00
git branch "${RELEASE_BRANCH}"
git switch "${RELEASE_BRANCH}"
- name: 🔖 Update version
env:
MAS_VERSION: ${{ needs.start.outputs.mas_version }}
run: |
2024-07-31 03:18:37 +00:00
script/version_bump "${MAS_VERSION}"
2024-11-03 17:28:10 +00:00
- name: 🔧 Configure Git Author
run: |
git config --global user.name 'masclibot'
git config --global user.email 'masclibot@users.noreply.github.com'
- name: 💾 Commit changes
env:
MAS_VERSION: ${{ needs.start.outputs.mas_version }}
2024-07-31 02:36:16 +00:00
RELEASE_BRANCH: ${{ needs.start.outputs.release_branch }}
run: |
git add \
"Homebrew/mas.rb" \
"Homebrew/mas-tap.rb" \
2024-11-03 17:18:35 +00:00
"Package.swift"
git commit \
2024-07-31 02:11:01 +00:00
--message="🔖 Version ${MAS_VERSION}"
2024-07-31 02:36:16 +00:00
git push \
--set-upstream origin "${RELEASE_BRANCH}"
2024-03-11 01:32:02 +00:00
pkg-installer:
runs-on: macos-15
needs: [start, prepare-release]
2024-03-11 01:32:02 +00:00
steps:
2024-02-18 19:13:42 +00:00
- uses: actions/checkout@v4
with:
# A fetch-depth of 0 includes all history and tags for script/version
fetch-depth: 0
ref: ${{ needs.start.outputs.release_branch }}
2024-03-11 01:32:02 +00:00
- 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
2024-03-11 01:32:02 +00:00
- name: 📦 macOS Package
run: |
script/package
2024-03-11 01:32:02 +00:00
- name: 🚀 Upload mas.pkg
env:
GH_TOKEN: ${{ github.token }}
DRY_RUN: ${{ needs.start.outputs.dry_run }}
MAS_VERSION: ${{ needs.start.outputs.mas_version }}
if: ${{ needs.start.outputs.dry_run == 'false' }}
run: |
2024-07-31 02:11:01 +00:00
gh release upload ${MAS_VERSION} \
.build/mas.pkg
homebrew-tap:
runs-on: macos-15
needs: [start, prepare-release]
2024-03-11 01:32:02 +00:00
steps:
- name: 📺 Checkout mas repo
uses: actions/checkout@v4
2024-03-11 01:32:02 +00:00
with:
# A fetch-depth of 0 includes all history and tags for script/version
fetch-depth: 0
ref: ${{ needs.start.outputs.release_branch }}
2024-03-11 01:32:02 +00:00
- name: 👢 Bootstrap
run: |
script/bootstrap -f
2024-03-11 01:32:02 +00:00
# The mas-cli/homebrew-tap repo needs to be checked out using the current
# GitHub credentials in order to open a PR. However, the `brew tap` command
# must be run for Homebrew to see the dir as a tap.
2024-08-03 20:47:08 +00:00
# This is necessary to avoid the following error:
# Error: No available formula or cask with the name "mas-cli/tap/mas".
- name: 🚰 Checkout mas tap
2024-08-03 20:47:08 +00:00
run: |
rm -rf /opt/homebrew/Library/Taps
2024-10-13 16:38:46 +00:00
mkdir Taps
2024-10-20 17:53:37 +00:00
ln -s $(realpath Taps) /opt/homebrew/Library/Taps
2024-10-13 16:38:46 +00:00
ls -l /opt/homebrew/Library/Taps
brew tap mas-cli/tap
brew tap
2024-08-03 20:47:08 +00:00
# Checkout with a token for write access
- name: 🚰 Re-clone mas tap
uses: actions/checkout@v4
with:
repository: mas-cli/homebrew-tap
token: ${{ secrets.DEPLOY_TOKEN }}
2024-08-03 20:47:08 +00:00
# brew --repository mas-cli/tap
path: Taps/mas-cli/homebrew-tap
2024-11-03 17:28:10 +00:00
- name: 🔧 Configure Git Author
run: |
git config --global user.name 'masclibot'
git config --global user.email 'masclibot@users.noreply.github.com'
- name: ⤴️ Open mas tap PR
env:
GITHUB_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
DRY_RUN: ${{ needs.start.outputs.dry_run }}
RELEASE_BRANCH: ${{ needs.start.outputs.release_branch }}
MAS_VERSION: ${{ needs.start.outputs.mas_version }}
2024-08-03 20:47:08 +00:00
working-directory: /opt/homebrew/Library/Taps/mas-cli/homebrew-tap
run: |
git branch "${RELEASE_BRANCH}"
git switch "${RELEASE_BRANCH}"
cp -v \
${GITHUB_WORKSPACE}/Homebrew/mas-tap.rb \
Formula/mas.rb
git add Formula/mas.rb
git commit --message="🔖 Version ${MAS_VERSION}"
git push \
--set-upstream origin "${RELEASE_BRANCH}"
gh pr create \
--assignee phatblat \
--base main \
--draft \
--head "${RELEASE_BRANCH}" \
--title "🔖 Version ${MAS_VERSION}" \
2024-11-03 18:38:06 +00:00
--body "This PR contains the changes from releasing version \
[${MAS_VERSION}](https://github.com/mas-cli/mas/releases/tag/${MAS_VERSION})."
- name: 🚰 Update mas tap formula
env:
GH_TOKEN: ${{ github.token }}
DRY_RUN: ${{ needs.start.outputs.dry_run }}
MAS_VERSION: ${{ needs.start.outputs.mas_version }}
run: |
DRY_RUN=${DRY_RUN} \
script/brew_tap_update ${MAS_VERSION}
- name: 🚀 Upload Bottles
env:
GH_TOKEN: ${{ github.token }}
DRY_RUN: ${{ needs.start.outputs.dry_run }}
MAS_VERSION: ${{ needs.start.outputs.mas_version }}
if: ${{ needs.start.outputs.dry_run == 'false' }}
run: |
2024-07-31 02:11:01 +00:00
gh release upload ${MAS_VERSION} \
.build/bottles/mas-*.bottle.tar.gz
homebrew-core:
runs-on: macos-15
needs: [start, prepare-release, homebrew-tap]
2024-03-11 01:32:02 +00:00
steps:
- uses: actions/checkout@v4
with:
# A fetch-depth of 0 includes all history and tags for script/version
fetch-depth: 0
ref: ${{ needs.start.outputs.release_branch }}
2024-03-11 01:32:02 +00:00
- name: 👢 Bootstrap
run: |
script/bootstrap -f
2024-03-11 01:32:02 +00:00
2024-11-03 17:28:10 +00:00
- name: 🔧 Configure Git Author
run: |
git config --global user.name 'masclibot'
git config --global user.email 'masclibot@users.noreply.github.com'
- name: 🍺 Update Homebrew mas formula
env:
2024-07-31 03:36:18 +00:00
GH_TOKEN: ${{ github.token }}
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
DRY_RUN: ${{ needs.start.outputs.dry_run }}
MAS_VERSION: ${{ needs.start.outputs.mas_version }}
2024-03-11 01:32:02 +00:00
run: |
2024-07-31 02:11:01 +00:00
DRY_RUN=${DRY_RUN} \
script/brew_core_update ${MAS_VERSION}