forked from carbon-language/carbon-lang
-
Notifications
You must be signed in to change notification settings - Fork 0
145 lines (126 loc) · 5.45 KB
/
nightly-release-macos.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# 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=${{ github.ref_name }}" >> $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