Build macOS #199
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build macOS | |
on: | |
schedule: | |
# Run nightly at 00:00 | |
- cron: '0 0 * * *' | |
workflow_dispatch: | |
inputs: | |
otp-ref-name: | |
required: true | |
otp-ref: | |
required: true | |
openssl-version: | |
default: "3.1.6" | |
jobs: | |
schedule: | |
name: "Schedule nightly" | |
if: github.event.schedule | |
runs-on: ubuntu-latest | |
steps: | |
- run: | | |
ref=$(gh api repos/erlang/otp/commits/master --jq .sha) | |
gh workflow run --repo hexpm/bob macos.yml --field otp-ref-name=master --field otp-ref=$ref | |
ref=$(gh api repos/erlang/otp/commits/maint --jq .sha) | |
gh workflow run --repo hexpm/bob macos.yml --field otp-ref-name=maint --field otp-ref=$ref | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
build: | |
name: "Build OTP macOS ${{ inputs.otp-ref-name }} ${{ matrix.arch }}" | |
if: github.event.inputs | |
runs-on: macos-latest | |
concurrency: | |
group: "builds/otp/${{ matrix.arch }}/macos/builds.txt" | |
env: | |
OTP_REF_NAME: ${{ inputs.otp-ref-name }} | |
OPENSSL_VERSION: ${{ inputs.openssl-version }} | |
OTP_DIR: /tmp/builds/otp-${{ inputs.otp-ref-name }}-${{ inputs.otp-ref }}-openssl-${{ inputs.openssl-version }}-macos-${{ matrix.arch }} | |
OTP_REF: ${{ inputs.otp-ref }} | |
strategy: | |
matrix: | |
arch: [amd64, arm64] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v4 | |
with: | |
path: /tmp/builds/openssl-${{ env.OPENSSL_VERSION }}-macos-${{ matrix.arch }} | |
key: openssl-${{ env.OPENSSL_VERSION }}-macos-${{ matrix.arch }} | |
- uses: actions/cache@v4 | |
with: | |
path: ${{ env.OTP_DIR }} | |
key: otp-${{ env.OTP_REF }}-openssl-${{ env.OPENSSL_VERSION }}-macos-${{ matrix.arch }} | |
- name: Build | |
run: | | |
sh priv/scripts/otp/build_otp_macos.sh "${{ env.OTP_REF_NAME }}" "${{ env.OTP_REF }}" "${{ matrix.arch }}" | |
- name: Upload | |
run: | | |
function purge_key() { | |
curl \ | |
--fail \ | |
--retry 10 \ | |
-X POST \ | |
-H "Fastly-Key: ${FASTLY_KEY}" \ | |
-H "Accept: application/json" \ | |
-H "Content-Length: 0" \ | |
"https://api.fastly.com/service/${FASTLY_SERVICE_ID}/purge/$1" | |
} | |
ref_name=${{ env.OTP_REF_NAME }} | |
tgz=${{ env.OTP_REF_NAME }}.tar.gz | |
tar czf ${tgz} --cd ${{ env.OTP_DIR }} . | |
s3_base_url="s3://${{ env.AWS_S3_BUCKET }}/builds/otp/${{ matrix.arch }}/macos" | |
# Upload tar.gz | |
surrogate_key="builds/otp/${{ matrix.arch }}/macos/${{ env.OTP_REF_NAME }}" | |
aws s3 cp \ | |
${tgz} \ | |
"${s3_base_url}/${tgz}" \ | |
--cache-control "public,max-age=3600" \ | |
--metadata "{\"surrogate-key\":\"builds builds/otp ${surrogate_key}\",\"surrogate-control\":\"public,max-age=604800\"}" | |
purge_key ${surrogate_key} | |
# Upload builds.txt | |
date=$(date -u '+%Y-%m-%dT%H:%M:%SZ') | |
build_sha256=$(shasum -a 256 $tgz | cut -d ' ' -f 1) | |
aws s3 cp ${s3_base_url}/builds.txt builds.txt || true | |
touch builds.txt | |
sed -i.bak "/^${ref_name} /d" builds.txt | |
echo -e "${ref_name} ${{ env.OTP_REF }} ${date} ${build_sha256}\n$(cat builds.txt)" > builds.txt | |
sort -u -k1,1 -o builds.txt builds.txt | |
surrogate_key="builds/otp/${{ matrix.arch }}/macos/builds.txt" | |
aws s3 cp \ | |
builds.txt \ | |
${s3_base_url}/builds.txt \ | |
--cache-control "public,max-age=3600" \ | |
--metadata "{\"surrogate-key\":\"builds builds/otp ${surrogate_key}\",\"surrogate-control\":\"public,max-age=604800\"}" | |
purge_key ${surrogate_key} | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.BUILDS_AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.BUILDS_AWS_SECRET_ACCESS_KEY }} | |
AWS_REGION: ${{ secrets.BUILDS_AWS_REGION }} | |
AWS_S3_BUCKET: ${{ secrets.BUILDS_AWS_S3_BUCKET }} | |
FASTLY_SERVICE_ID: ${{ secrets.BUILDS_FASTLY_SERVICE_ID }} | |
FASTLY_KEY: ${{ secrets.BUILDS_FASTLY_KEY }} |