Skip to content

Nightly Release for macOS #24

Nightly Release for macOS

Nightly Release for macOS #24

# Part of the Carbon Language project, under the Apache License v2.0 with LLVM
# Exceptions. See /LICENSE for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
# This workflow creates a GitHub "release" of a nightly build of the project.
#
# Note: This is just an initial rough attempt, there is a lot of future work
# needed here. A brief summary of TODOs:
#
# - Configure a nice release notes template and switch to generating the title
# and notes instead of hard coding them.
#
# - Do some amount of testing prior to building and uploading the release.
# - Tempting to try to examine existing testing workflow, but maybe better to
# allow re-using any complex parts and do our own testing. That would, for
# example, allow us to narrow or expand the set of tests uses for
# pre-release testing to potentially be different from continuous testing.
# - Some questions around what to do in the event of a failure... error? Where
# does the error go? Create a draft, unpublished release instead?
#
# - Build artifacts for all the different OSes we have GitHub runners for rather
# than just x86 Linux.
name: Nightly Release for macOS
on:
schedule:
- cron: '0 9 * * *'
# Enable manual runs for testing or manually (re-)creating a nightly release.
workflow_dispatch:
permissions:
contents: write # For creating and uploading to releases.
jobs:
release:
runs-on: macos-12
strategy:
matrix:
arch: [amd64]
steps:
- name: Harden Runner
uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0
with:
egress-policy: audit
- name: Checkout branch
uses: actions/[email protected]
- name: Configure Git
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
- name: Delete old tag
run: |
echo "old_tag_name=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
git tag -d ${{ env.old_tag_name }}
git push origin :refs/tags/${{ env.old_tag_name }}
- name: Create new tag
run: |
new_tag_name=$(echo ${{ env.old_tag_name }} | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+)-0\.nightly\.([0-9]+)\.([0-9]+)\.([0-9]+)/\1-nightly\2\3\4/')
git tag ${new_tag_name}
git push origin ${new_tag_name}
# - name: Set up remote cache access
# env:
# REMOTE_CACHE_KEY: ${{ secrets.CARBON_BUILDS_GITHUB }}
# run: |
# echo "$REMOTE_CACHE_KEY" | base64 -d > $HOME/remote_cache_key.json
# echo "remote_cache_upload=--google_credentials=$HOME/remote_cache_key.json" \
# >> $GITHUB_ENV
- uses: ./.github/actions/build-setup-common
with:
matrix_runner: macos-12
# remote_cache_upload: ${{ env.remote_cache_upload }}
- name: Get nightly date
run: |
echo "nightly_date=$(date '+%Y-%m-%d')" >> $GITHUB_ENV
- name: Build release
run: |
./scripts/run_bazel.py \
--attempts=5 --jobs-on-last-attempt=4 \
test -c opt --remote_download_toplevel \
--pre_release=nightly --nightly_date=${{ env.nightly_date }} \
//toolchain/install:prefix_root/bin/carbon \
//toolchain/install:carbon_toolchain_tar_gz_rule \
//toolchain/install:carbon_toolchain_tar_gz_test
- name: Extract the release version
run: |
# Make sure we can run the toolchain to get the version.
./bazel-bin/toolchain/install/prefix_root/bin/carbon version
# Now stash it in a variable and export it.
VERSION=$( \
./bazel-bin/toolchain/install/prefix_root/bin/carbon version \
| cut -d' ' -f5 | cut -d'+' -f1)
echo "release_version=$VERSION" >> $GITHUB_ENV
- name: Determine platform-specific file name
id: platform
run: |
if [[ "${{ matrix.arch }}" == "amd64" ]]; then
echo "PLATFORM_SUFFIX=macos-amd64" >> $GITHUB_ENV
elif [[ "${{ matrix.arch }}" == "arm64" ]]; then
echo "PLATFORM_SUFFIX=macos-arm64" >> $GITHUB_ENV
else
echo "Unsupported architecture: ${{ matrix.arch }}"
exit 1
fi
- name: Calculate SHA256 hash
run: |
FILE="bazel-bin/toolchain/install/carbon_toolchain-${{ env.release_version }}-${{ env.PLATFORM_SUFFIX }}"
if [[ -f "${FILE}.tar.gz" ]]; then
shasum -a 256 "${FILE}.tar.gz" | awk '{ print $1 }' > "${FILE}.sha256"
fi
- name: Create the release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
FILE="bazel-bin/toolchain/install/carbon_toolchain-${{ env.release_version }}-${{ env.PLATFORM_SUFFIX }}"
if [[ -f "${FILE}.tar.gz" ]] && [[ -f "${FILE}.sha256" ]]; then
## Rename the files to remove '0.' from '0.nightly'
# NEW_FILE="${FILE/0.nightly/nightly}"
# mv "${FILE}.tar.gz" "${NEW_FILE}.tar.gz"
# mv "${FILE}.sha256" "${NEW_FILE}.sha256"
NEW_FILE="${FILE}"
# Create the release
gh release create \
--title "Nightly build ${{ env.nightly_date }}" \
--generate-notes \
--prerelease \
v${{ env.release_version }} \
"${NEW_FILE}.tar.gz" \
"${NEW_FILE}.sha256"
fi