Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/scripts/generate-homebrew-tap
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#! /usr/bin/env bash

set -euo pipefail

export TERRABUILD_VERSION="${1}"
TAP_FILE="${2:-"./.github/scripts/homebrew-tap.rb}"}"
TAP_FILE="$(realpath "${TAP_FILE}")"

cd "$(mktemp -d)"

>&2 echo "::info Generating Homebrew Tap..."
>&2 echo "::group::Download release assets"
>&2 gh release download --repo MagnusOpera/Terrabuild "${TERRABUILD_VERSION}" -p 'terrabuild*darwin*.zip' -p 'terrabuild*linux*.zip' --skip-existing
>&2 echo "::endgroup::"

for i in \
"darwin x64 TERRABUILD_DARWIN_X64" \
"darwin arm64 TERRABUILD_DARWIN_ARM64" \
"linux x64 TERRABUILD_LINUX_X64" \
"linux arm64 TERRABUILD_LINUX_ARM64" \
; do
# shellcheck disable=SC2086 # intentional, we want to split the strings
set -- $i # read loop strings as args
OS="$1"
ARCH="$2"
ENV_VAR="$3"
SHA256="$(sha256sum "terrabuild-${TERRABUILD_VERSION}-${OS}-${ARCH}.zip" | cut -f1 -d' ')"

SHA256_VAR="${ENV_VAR}_SHA256"
URL_VAR="${ENV_VAR}_URL"
printf -v "${SHA256_VAR}" "%s" "${SHA256}"
printf -v "${URL_VAR}" "%s" "https://github.com/MagnusOpera/Terrabuild/releases/download/${TERRABUILD_VERSION}/terrabuild-${TERRABUILD_VERSION}-${OS}-${ARCH}.zip"

export "${SHA256_VAR?}"
export "${URL_VAR?}"
>&2 echo "${OS}-${ARCH} SHA256: " "${!SHA256_VAR}"
>&2 echo "${OS}-${ARCH} URL: " "${!URL_VAR}"

done

# shellcheck disable=SC2016 # intentional, envsubst requires us to pass variable names with $ prefixes.
envsubst '$TERRABUILD_VERSION,$TERRABUILD_DARWIN_X64_URL,$TERRABUILD_DARWIN_X64_SHA256,$TERRABUILD_DARWIN_ARM64_URL,$TERRABUILD_DARWIN_ARM64_SHA256,$TERRABUILD_LINUX_X64_URL,$TERRABUILD_LINUX_X64_SHA256,$TERRABUILD_LINUX_ARM64_URL,$TERRABUILD_LINUX_ARM64_SHA256' < "${TAP_FILE}"
37 changes: 37 additions & 0 deletions .github/scripts/terrabuild-tap-template.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# typed: false
# frozen_string_literal: true

# This file was generated by https://github.com/MagnusOpera/terrabuild/blob/main/.github/scripts/generate-homebrew-tap
cask "terrabuild" do
name "terrabuild"
version "${TERRABUILD_VERSION}"
homepage "https://terrabuild.io"
desc "Fast and low ceremony build & deploy system for monorepos"
binary "terrabuild"

on_macos do
if Hardware::CPU.intel?
url "${TERRABUILD_DARWIN_X64_URL}"
sha256 "${TERRABUILD_DARWIN_X64_SHA256}"
end
if Hardware::CPU.arm?
url "${TERRABUILD_DARWIN_ARM64_URL}"
sha256 "${TERRABUILD_DARWIN_ARM64_SHA256}"
end
end

on_linux do
# if Hardware::CPU.arm? && Hardware::CPU.is_64_bit?
# url "${TERRABUILD_LINUX_ARM64_URL}"
# sha256 "${TERRABUILD_LINUX_ARM64_SHA256}"
# end
if Hardware::CPU.intel?
url "${TERRABUILD_LINUX_X64_URL}"
sha256 "${TERRABUILD_LINUX_X64_SHA256}"
end
end

caveats do
license "https://raw.githubusercontent.com/MagnusOpera/Terrabuild/main/LICENSE"
end
end
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,17 @@ jobs:

- name: Pack
run: |
(cd .out/dotnet; zip ../terrabuild-dotnet.zip ./*)
(cd .out/windows; zip ../terrabuild-windows-x64.zip ./terrabuild.exe)
(cd .out/linux; zip ../terrabuild-linux-x64.zip ./terrabuild)
(cd .out/dotnet; zip ../terrabuild-${BUILD_VERSION}-dotnet.zip ./*)
(cd .out/windows; zip ../terrabuild-${BUILD_VERSION}-windows-x64.zip ./terrabuild.exe)
(cd .out/linux; zip ../terrabuild-${BUILD_VERSION}-linux-x64.zip ./terrabuild)
(cd .out/darwin; zip -r ../terrabuild-darwin-binaries.zip .)

- name: Archive .net Outputs
uses: actions/upload-artifact@v4
with:
name: outputs-dotnet
include-hidden-files: true
path: .out/terrabuild-dotnet.zip
path: .out/terrabuild-*-dotnet.zip

- name: Archive NuGet Outputs
uses: actions/upload-artifact@v4
Expand All @@ -67,14 +67,14 @@ jobs:
with:
name: outputs-windows
include-hidden-files: true
path: .out/terrabuild-windows-x64.zip
path: .out/terrabuild-*-windows-x64.zip

- name: Archive Linux Outputs
uses: actions/upload-artifact@v4
with:
name: outputs-linux
include-hidden-files: true
path: .out/terrabuild-linux-x64.zip
path: .out/terrabuild-*-linux-x64.zip

- name: Archive macOS outputs
uses: actions/upload-artifact@v4
Expand All @@ -97,6 +97,18 @@ jobs:
- name: Extract Binaries
run: unzip -d .out/darwin .out/terrabuild-darwin-binaries.zip

- name: Signing Version/Version Suffix
run: |
s=${{github.ref_name}}
pat="([^-]*)-?([^-]*)"
[[ $s =~ $pat ]]
BUILD_VERSION=${BASH_REMATCH[1]}
BUILD_VERSION_SUFFIX=${BASH_REMATCH[2]}
echo "BUILD_VERSION=$BUILD_VERSION" >> $GITHUB_ENV
echo "BUILD_VERSION_SUFFIX=$BUILD_VERSION_SUFFIX" >> $GITHUB_ENV
echo "BUILD_VERSION: $BUILD_VERSION"
echo "BUILD_VERSION_SUFFIX: $BUILD_VERSION_SUFFIX"

- name: Add Cert to Keychain
uses: apple-actions/import-codesign-certs@v3
with:
Expand All @@ -107,18 +119,15 @@ jobs:
run: |
codesign --force --timestamp --sign "Developer ID Application: Magnus Opera (${{ secrets.MAC_DEV_TEAM_ID }})" .out/darwin/x64/terrabuild --options=runtime --no-strict --entitlements entitlements.plist
codesign --force --timestamp --sign "Developer ID Application: Magnus Opera (${{ secrets.MAC_DEV_TEAM_ID }})" .out/darwin/arm64/terrabuild --options=runtime --no-strict --entitlements entitlements.plist
(cd .out/darwin/x64; zip ../terrabuild-darwin-x64.zip ./terrabuild)
(cd .out/darwin/arm64; zip ../terrabuild-darwin-arm64.zip ./terrabuild)
# lipo -create -output .out/darwin/terrabuild .out/darwin/x64/terrabuild .out/darwin/arm64/terrabuild
# codesign --force --timestamp --sign "Developer ID Application: Magnus Opera (${{ secrets.MAC_DEV_TEAM_ID }})" .out/darwin/terrabuild --options=runtime --no-strict --entitlements entitlements.plist
# (cd .out/darwin; zip ../terrabuild-darwin-universal.zip ./terrabuild)
(cd .out/darwin/x64; zip ../terrabuild-${BUILD_VERSION}-darwin-x64.zip ./terrabuild)
(cd .out/darwin/arm64; zip ../terrabuild-${BUILD_VERSION}-darwin-arm64.zip ./terrabuild)

- name: Archive Signed Binaries
uses: actions/upload-artifact@v4
with:
name: outputs-macos
include-hidden-files: true
path: .out/darwin/terrabuild-darwin-*.zip
path: .out/darwin/terrabuild-*-darwin-*.zip

create-release:
runs-on: ubuntu-latest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
uses: robinraju/release-downloader@v1.11
with:
tag: ${{github.ref_name}}
fileName: 'terrabuild-darwin-*.zip'
fileName: 'terrabuild-*-darwin-*.zip'

- name: Add Cert to Keychain
uses: apple-actions/import-codesign-certs@v3
Expand All @@ -47,7 +47,7 @@ jobs:
uses: GuillaumeFalourd/notary-tools@v1
timeout-minutes: 5
with:
product_path: "terrabuild-darwin-x64.zip"
product_path: "terrabuild-*-darwin-x64.zip"
apple_id: ${{ secrets.MAC_DEV_LOGIN }}
password: ${{ secrets.MAC_DEV_PASSWORD }}
team_id: ${{ secrets.MAC_DEV_TEAM_ID }}
Expand All @@ -64,3 +64,4 @@ jobs:
team_id: ${{ secrets.MAC_DEV_TEAM_ID }}
xcode_path: '/Applications/Xcode_15.3.app'
staple: false

86 changes: 86 additions & 0 deletions .github/workflows/release-homebrew-tap.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Post-Release Homebrew Tap

permissions:
contents: read

on:
workflow_call:
inputs:
ref:
required: true
description: "GitHub ref to use"
type: string
version:
required: true
description: "Version to produce"
type: string
dry-run:
required: false
default: true
description: "Whether to run in dry-run mode and skip pushing the commit"
type: boolean
workflow_dispatch:
inputs:
ref:
required: true
description: "GitHub ref to use"
type: string
version:
required: true
description: "Version to produce"
type: string
dry-run:
required: false
default: true
description: "Whether to run in dry-run mode and skip pushing the commit"
type: boolean

env:
TERRABUILD_VERSION: ${{ inputs.version }}
GITHUB_TOKEN: ${{ secrets.GIT_PAT }}

jobs:
update-homebrew-tap:
name: Update Homebrew Tap
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
path: terrabuild
- name: Checkout tap repo
uses: actions/checkout@v4
with:
repository: MagnusOpera/homebrew-tap
path: homebrew-tap
token: ${{ secrets.GIT_PAT }}
- name: Update Homebrew Tap
run: |
set -euo pipefail

# Can simulate this by cloning MagnusOpera/terrabuild & MagnusOpera/homebrew-tap to adacent directories
# and running from their parent:

./terrabuild/.github/scripts/generate-homebrew-tap \
"${TERRABUILD_VERSION}" ./terrabuild/.github/scripts/terrabuild-tap-template.rb \
> ./homebrew-tap/Casks/terrabuild.rb
- name: Commit updated formula
working-directory: homebrew-tap
run: |
set -euo pipefail

git config user.name magnusopera-bot
git config user.email bot@magnusopera.io
git add Casks/terrabuild.rb
echo "::group::git diff"
git --no-pager diff
echo "::endgroup::"
git commit -m "Brew formula update for Terrabuild version ${TERRABUILD_VERSION}"
- name: Push formula
working-directory: homebrew-tap
if: ${{ !inputs.dry-run }}
run: |
set -euo pipefail

git push origin HEAD:main
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -418,3 +418,4 @@ terrabuild-debug.md
.out
.nuget
.mono
*.zip
Loading