yesod-mirror/.forgejo-disabled/workflows/publish-homebrew-packages.yml
Copybara 8467693da2 Project import generated by Copybara.
GitOrigin-RevId: b92a7f45eee3c5424fc21e9e9cc9ac1dcde0ce30
2026-01-20 21:50:19 +00:00

157 lines
6 KiB
YAML

name: Publish Homebrew Packages
on:
schedule:
- cron: '0 2 * * *' # Run at 2 AM
workflow_dispatch:
permissions:
packages: write
jobs:
build-and-publish:
runs-on: docker
container:
image: forgejo.csbx.dev/acmcarther/coder-dev-base-image:4
strategy:
matrix:
include:
- package: tts-client
target: //experimental/users/acmcarther/llm/tts_grpc:tts_client_go
binary_name: tts-client-darwin-arm64
- package: litellm-client
target: //experimental/users/acmcarther/llm/litellm_grpc:client_go
binary_name: litellm-client-darwin-arm64
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install bazelisk
run: |
curl -fLO "http://bin-cache-http.dev.svc.cluster.local/bazelisk/v1.27.0/bazelisk-linux-amd64"
mkdir -p "${GITHUB_WORKSPACE}/bin/"
mv bazelisk-linux-amd64 "${GITHUB_WORKSPACE}/bin/bazel"
chmod +x "${GITHUB_WORKSPACE}/bin/bazel"
echo "${GITHUB_WORKSPACE}/bin" >> $GITHUB_PATH
- name: Build Binary (Darwin ARM64)
env:
BAZELISK_BASE_URL: "http://bin-cache-http.dev.svc.cluster.local/bazel"
run: |
bazel build --config=remote --platforms=@rules_go//go/toolchain:darwin_arm64 ${{ matrix.target }}
- name: Publish Artifact
env:
YESOD_PACKAGE_TOKEN: ${{ secrets.YESOD_PACKAGE_TOKEN }}
PACKAGE_NAME: ${{ matrix.package }}
BINARY_NAME: ${{ matrix.binary_name }}
TARGET: ${{ matrix.target }}
run: |
# Calculate Version
SHORT_SHA=$(git rev-parse --short HEAD)
VERSION="0.0.2-${SHORT_SHA}"
PACKAGE_URL="https://forgejo.csbx.dev/api/packages/acmcarther/generic/${PACKAGE_NAME}/${VERSION}/${BINARY_NAME}"
echo "Publishing ${PACKAGE_NAME} version ${VERSION}"
# Locate the binary using cquery for precision
BINARY_PATH=$(bazel cquery --config=remote --platforms=@rules_go//go/toolchain:darwin_arm64 --output=files ${TARGET} 2>/dev/null)
if [ -z "$BINARY_PATH" ]; then
echo "cquery failed to find the binary path for ${TARGET}"
exit 1
fi
# Upload
echo "Uploading to ${PACKAGE_URL}..."
curl -v --fail \
-H "Authorization: token $YESOD_PACKAGE_TOKEN" \
-X PUT \
"${PACKAGE_URL}" \
-T "$BINARY_PATH"
update-homebrew:
needs: build-and-publish
runs-on: docker
container:
image: forgejo.csbx.dev/acmcarther/coder-dev-base-image:4
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install bazelisk
run: |
curl -fLO "http://bin-cache-http.dev.svc.cluster.local/bazelisk/v1.27.0/bazelisk-linux-amd64"
mkdir -p "${GITHUB_WORKSPACE}/bin/"
mv bazelisk-linux-amd64 "${GITHUB_WORKSPACE}/bin/bazel"
chmod +x "${GITHUB_WORKSPACE}/bin/bazel"
echo "${GITHUB_WORKSPACE}/bin" >> $GITHUB_PATH
- name: Generate and Update Formulas
env:
BAZELISK_BASE_URL: "http://bin-cache-http.dev.svc.cluster.local/bazel"
PACKAGES: "tts-client litellm-client"
run: |
SHORT_SHA=$(git rev-parse --short HEAD)
VERSION="0.0.2-${SHORT_SHA}"
for PACKAGE in $PACKAGES; do
echo "Processing $PACKAGE..."
# Convert hyphen to underscore for bazel target name convention
TARGET_NAME="generate_${PACKAGE//-/_}_rb"
BAZEL_TARGET="//homebrew:${TARGET_NAME}"
BINARY_NAME="${PACKAGE}-darwin-arm64"
PACKAGE_URL="https://forgejo.csbx.dev/api/packages/acmcarther/generic/${PACKAGE}/${VERSION}/${BINARY_NAME}"
echo "Building formula target: $BAZEL_TARGET"
bazel build --config=remote --platforms=@rules_go//go/toolchain:darwin_arm64 $BAZEL_TARGET
FORMULA_PATH=$(bazel cquery --config=remote --platforms=@rules_go//go/toolchain:darwin_arm64 --output=files $BAZEL_TARGET 2>/dev/null)
if [ -z "$FORMULA_PATH" ]; then
echo "Failed to find generated formula for $PACKAGE"
exit 1
fi
echo "Generated formula at: $FORMULA_PATH"
# Inject Version and URL
sed -e "s|{VERSION}|${VERSION}|g" \
-e "s|{URL}|${PACKAGE_URL}|g" \
"$FORMULA_PATH" > homebrew/${PACKAGE}.rb
echo "Updated homebrew/${PACKAGE}.rb"
done
- name: Configure Git
run: |
git config --global user.name "Copybara"
git config --global user.email "copybara@csbx.dev"
git config --global url."https://acmcarther:${{ secrets.HOMEBREW_REPO_TOKEN }}@forgejo.csbx.dev/acmcarther/yesod-homebrew-tools.git".insteadOf "https://forgejo.csbx.dev/acmcarther/yesod-homebrew-tools.git"
- name: Run Copybara
env:
BAZELISK_BASE_URL: "http://bin-cache-http.dev.svc.cluster.local/bazel"
run: |
# Stage the new formulas
git add homebrew/*.rb
# Check if there are changes
if git diff --cached --quiet; then
echo "No changes to commit."
else
SHORT_SHA=$(git rev-parse --short HEAD)
VERSION="0.0.2-${SHORT_SHA}"
git commit -m "Update homebrew formulas to ${VERSION} [skip ci]"
# Patch copy.bara.sky to use local origin
sed -i "s|sourceUrl = .*|sourceUrl = \"file://${GITHUB_WORKSPACE}\"|" "${GITHUB_WORKSPACE}/tools/copybara/homebrew/copy.bara.sky"
# Run Copybara
bazel run //tools/copybara:copybara --config=remote --java_runtime_version=remotejdk_21 -- \
migrate \
"${GITHUB_WORKSPACE}/tools/copybara/homebrew/copy.bara.sky" \
--force
fi