Skip to content

earthly 0.8.11

earthly 0.8.11 #121

name: brew test and publish bot
on:
push:
branches:
- release-*
jobs:
release:
runs-on: macos-latest
steps:
- name: Set up Homebrew
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Set up git
uses: Homebrew/actions/git-user-config@master
- name: Cache Homebrew Bundler RubyGems
id: cache
uses: actions/cache@v1
with:
path: ${{ steps.set-up-homebrew.outputs.gems-path }}
key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }}
restore-keys: ${{ runner.os }}-rubygems-
- name: Install Homebrew Bundler RubyGems
if: steps.cache.outputs.cache-hit != 'true'
run: brew install-bundler-gems
- name: cleanup
env:
HOMEBREW_GITHUB_API_TOKEN: ${{ github.token }}
run: brew test-bot --only-cleanup-before
- name: setup
env:
HOMEBREW_GITHUB_API_TOKEN: ${{ github.token }}
run: brew test-bot --only-setup
- name: syntax check
env:
HOMEBREW_GITHUB_API_TOKEN: ${{ github.token }}
run: brew test-bot --only-tap-syntax
- name: brew update
env:
HOMEBREW_NO_INSTALL_FROM_API: 1
run: brew update
- name: build earthly bottles
env:
HOMEBREW_GITHUB_API_TOKEN: ${{ github.token }}
run: brew test-bot --only-formulae earthly
# homebrew intentially adds in two hyphens under
# https://github.com/Homebrew/brew/blob/b55498269f1fb0380cfd7122f6bbc0fc0125c35f/Library/Homebrew/software_spec.rb#L279
- name: remove double hyphens which are produced by test-bot
run: ls earthly--* | grep bottle | awk -F "--" '{print "mv " $0 " " $1"-"$2}' | sh
- name: move bottles into bottles/ dir
run: mkdir bottles/ && mv *.bottle.* bottles/
- name: merge bottles
env:
HOMEBREW_GITHUB_API_TOKEN: ${{ github.token }}
run: brew bottle --merge --root-url "https://github.com/$GITHUB_REPOSITORY/releases/download/" --write bottles/*.json
# "brew test-bot" removes dependencies; we must re-install them here
- name: (re)install dependencies
run: brew install jq npm
- name: setup github-release
run: npm install -g [email protected]
- name: release bottles
env:
GITHUB_TOKEN: ${{ github.token }}
run: |-
set -e
VERSION="${GITHUB_REF#refs/heads/release-v}"
if ! echo $VERSION | grep '^[0-9]\+\.[0-9]\+\.[0-9]\+$' >/dev/null; then
echo "ERROR: failed to detect semantic version; got $VERSION"
exit 1
fi
RELEASE_TAG="earthly-$VERSION"
# first delete any previously released files (needed in case the previous upload attempt failed)
PREV_RELEASE_ID=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/tags/$RELEASE_TAG" | jq .id)
if [ -n "$PREV_RELEASE_ID" ] && [ "$PREV_RELEASE_ID" != "null" ]; then
echo "deleting previous release ID $PREV_RELEASE_ID"
curl -s -H "Authorization: token $GITHUB_TOKEN" --request DELETE "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/$PREV_RELEASE_ID"
fi
# next make sure any previous tag is deleted (otherwise github will create an untagged release name vX.Y.Z)
echo "deleting tag $RELEASE_TAG (in case it already exists)"
curl -s -H "Authorization: token $GITHUB_TOKEN" --request DELETE "https://api.github.com/repos/$GITHUB_REPOSITORY/git/refs/tags/$RELEASE_TAG"
GITHUB_OWNER=$(dirname "$GITHUB_REPOSITORY")
GITHUB_REPO=$(basename "$GITHUB_REPOSITORY")
github-release upload \
--owner "$GITHUB_OWNER" \
--repo "$GITHUB_REPO" \
--prerelease false \
--commitish "$GITHUB_SHA" \
--tag "$RELEASE_TAG" \
--name "$RELEASE_TAG" \
--body "earthly: update $VERSION bottle." \
./bottles/*.tar.gz 2>&1 | tee /tmp/release.log
if grep -i error /tmp/release.log > /dev/null; then
echo "ERROR: github-release upload failed: check the above release.log output" && exit 1
fi
- name: merge into main and delete release branch
env:
GITHUB_TOKEN: ${{ github.token }}
run: |-
# this should be different than GITHUB_SHA, due to brew bottle comitting a change
SHA=$(git rev-parse HEAD)
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
git fetch -a
git checkout main
git reset --hard origin/main
git merge "$SHA"
git push origin main
git push origin --delete "$GITHUB_REF"
curl -s -X POST -H 'Content-type: application/json' --data '{"text":"homebrew-earthly: Successfully merged release branch into main"}' "${{ secrets.SLACK_RELEASE_WEBHOOK_URL }}"
- name: post to slack on failure
run: |-
curl -s -X POST -H 'Content-type: application/json' --data '{ "attachments": [ { "fallback": "Failed to build release", "title": "earthly/homebrew-earthly tap", "title_link": "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID", "text": "Failed to build release!", "color": "#CC0000" } ] }' "${{ secrets.SLACK_RELEASE_WEBHOOK_URL }}"
if: ${{ failure() }}