Compare commits

...

16 Commits

Author SHA1 Message Date
b841bc77b9 feat(nightly): do not build arm64 variant by default
For now arm64 builds are only done once per month due to the high cost
of using the M1-based runners.
2023-11-20 09:30:51 +00:00
196270a3f4 fix(build): typo preventing correct info message from displaying 2023-11-20 09:30:31 +00:00
2062378299 chore(deps): update build-emacs-for-macos to 0.6.45 2023-11-20 02:29:12 +00:00
cc7bb92357 chore(builds): upgrade minimum macOS version from 11 to 12
Builds using macOS 11 just takes a stupidly long time as, as Homebrew
seems to have dropped support, meaning all homebrew dependencies are
installed from source, rather than get installed from bottles.

Hence let's try upgrading minimum macOS version from 11 (Big Sur), to
12 (Monteray).
2023-11-20 02:19:26 +00:00
1a36bde31e fix(workflow/nightly): remove errant input references 2023-11-20 01:07:47 +00:00
04d1bbeb71 fix(build): use correct bootstrap make target 2023-11-19 23:34:40 +00:00
3e4d8b1833 chore(deps): update build-emacs-for-macos to 0.6.44 2023-11-19 23:33:12 +00:00
a292b242c4 chore(nightly): temporarily enable arm64 builds
We want one scheduled arm64 build for now, then we'll revert to only
building them on the 1st of the month.
2023-11-19 23:30:02 +00:00
287df6914e fix(workflows): refactor nightly workflows 2023-11-19 23:24:49 +00:00
d2cb4d5905 chore(workflows): rename workflows back 2023-11-19 23:00:34 +00:00
6b4bd441a3 fix(build): pass inputs correctly 2023-11-19 22:54:40 +00:00
6e1af1b83f feat(build): disable emacs-29 branch builds
They are no longer that relevant, as Emacs 29.1 is out, and master is
version 30.
2023-11-19 22:41:32 +00:00
81b0e4a784 fix(build): do not require inputs which have defaults 2023-11-19 22:41:13 +00:00
503023cd53 chore(build): refactor build workflow 2023-11-19 22:27:49 +00:00
a79110c550 feat(build): support multi-arch builds 2023-11-19 22:26:46 +00:00
ff1b573f43 feat(build): allow running build job on separate OS
This should help reduce costs for Apple Silicon builds, as they are not
available on any form of free tier of GitHub Actions at the moment.

The build step that actually runs Emacs' configure script, and compiles
Emacs, is the only step that actually needs to run on the target
hardware architecture. The rest should be architecture agnostic.
2023-11-19 22:26:46 +00:00
6 changed files with 177 additions and 82 deletions

View File

@@ -11,7 +11,13 @@ on:
os:
description: GitHub Actions runner OS
type: string
required: true
required: false
default: "macos-12"
build_os:
description: Target OS to build for
type: string
required: false
default: "macos-12"
git_ref:
description: Git ref to build
type: string
@@ -58,6 +64,10 @@ on:
TAP_REPO_TOKEN:
description: Homebrew Tap Token
required: true
outputs:
package_created:
description: "Whether or not a package was created"
value: ${{ jobs.package.result == 'success' }}
jobs:
prepare:
@@ -88,16 +98,31 @@ jobs:
echo "sha=--sha '${{ inputs.git_sha }}'" >> $GITHUB_OUTPUT
plan:
needs: [prepare]
runs-on: ${{ inputs.os }}
runs-on: ${{ inputs.build_os }}
outputs:
check: ${{ steps.check.outputs.result }}
steps:
- name: Checkout build-emacs-for-macos repo
if: ${{ inputs.os != inputs.build_os }}
uses: actions/checkout@v4
with:
repository: jimeh/build-emacs-for-macos
ref: ${{ needs.prepare.outputs.builder_sha }}
- uses: actions/setup-go@v4
if: ${{ inputs.os != inputs.build_os }}
with:
go-version: "1.21"
- name: Build emacs-builder tool
if: ${{ inputs.os != inputs.build_os }}
run: make build
- name: Download pre-built emacs-builder artifact
if: ${{ inputs.os == inputs.build_os }}
uses: actions/download-artifact@v3
with:
name: emacs-builder
path: bin
- name: Ensure emacs-builder is executable
if: ${{ inputs.os == inputs.build_os }}
run: chmod +x bin/emacs-builder
- name: Plan build
run: >-
@@ -124,10 +149,10 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: echo 'Planned release already seems to exist.'
if: ${{ steps.check.outputs.result == 'fail' }}
if: ${{ steps.check.outputs.result == 'ok' }}
build:
runs-on: ${{ inputs.os }}
runs-on: ${{ inputs.build_os }}
needs: [prepare, plan]
# Only run if check for existing release and asset failed.
if: ${{ needs.plan.outputs.check == 'fail' }}
@@ -149,7 +174,7 @@ jobs:
-ilname '*/Library/Frameworks/Python.framework/*'
-delete
- name: Install dependencies
run: make bootstrap-ci
run: make bootstrap
working-directory: builder
- name: Download build-plan artifact
uses: actions/download-artifact@v3
@@ -162,6 +187,7 @@ jobs:
--log-level debug
--plan build-plan.yml
--native-full-aot
--no-self-sign
${{ inputs.build_args }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -180,7 +206,6 @@ jobs:
package:
runs-on: ${{ inputs.os }}
needs: [prepare, plan, build]
# Only run if check for existing release and asset failed.
steps:
- uses: actions/setup-python@v4
with:
@@ -243,7 +268,7 @@ jobs:
- name: Upload disk image artifacts
uses: actions/upload-artifact@v3
with:
name: dmg
name: ${{ inputs.artifact_prefix }}dmg
path: |
builds/*.dmg
builds/*.sha*

View File

@@ -6,12 +6,13 @@ on:
os:
description: GitHub Actions runner OS
type: string
required: true
required: false
default: "macos-12"
builder_ref:
description: Git ref to checkout of build-emacs-for-macos
required: false
type: string
default: "v0.6.43"
default: "v0.6.45"
secrets:
TAP_REPO_TOKEN:
description: Personal Access Token for Homebrew Tap repo

View File

@@ -7,7 +7,8 @@ on:
os:
description: GitHub Actions runner OS
type: string
required: true
required: false
default: "macos-12"
plan_artifact:
description: Name of artifact containing a emacs-builder plan yaml file
type: string
@@ -20,6 +21,11 @@ on:
description: "Test build name"
type: string
required: false
update_casks:
description: "Update casks in homebrew tap?"
type: boolean
required: true
default: true
secrets:
TAP_REPO_TOKEN:
description: Personal Access Token for Homebrew Tap repo
@@ -56,7 +62,10 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Trigger update casks workflow in homebrew tap
if: ${{ steps.dmg.outputs.result != 'fail' && inputs.test_build_name == '' }}
if: >-
steps.dmg.outputs.result != 'fail' &&
inputs.test_build_name == '' &&
inputs.update_casks
run: >-
gh workflow run --repo jimeh/homebrew-emacs-builds update-casks.yml
env:

View File

@@ -19,9 +19,9 @@ on:
required: false
default: ""
os:
description: 'Runner OS ("macos-11", "macos-12", or "macos-latest")'
description: 'Runner OS ("macos-12", "macos-13", or "macos-latest")'
required: true
default: "macos-11"
default: "macos-12"
test_build_name:
description: "Test build name"
required: false
@@ -30,6 +30,16 @@ on:
description: "prerelease or draft"
required: false
default: ""
x86_64:
description: "Build x86_64 version of Emacs"
required: false
default: true
type: boolean
arm64:
description: "Build arm64 version of Emacs"
required: false
default: false
type: boolean
jobs:
prepare:
@@ -41,12 +51,19 @@ jobs:
secrets:
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
build:
name: Build
needs: [prepare]
# ----------------------------------------------------------------------------
# Build x86_64 version of Emacs
# ----------------------------------------------------------------------------
build_x86_64:
name: Build (x86_64)
if: ${{ github.event.inputs.x86_64 == 'true' }}
uses: ./.github/workflows/_build.yml
needs: [prepare]
with:
os: ${{ github.event.inputs.os }}
build_os: "macos-12"
artifact_prefix: "x86_64-"
git_ref: ${{ github.event.inputs.git_ref }}
git_sha: ${{ github.event.inputs.git_sha }}
build_args: ${{ github.event.inputs.builder_args }}
@@ -62,14 +79,58 @@ jobs:
AC_SIGN_IDENTITY: ${{ secrets.AC_SIGN_IDENTITY }}
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
release:
name: Release
needs: [build]
release_x86_64:
name: Release (x86_64)
uses: ./.github/workflows/_release.yml
needs: [build_x86_64]
if: ${{ needs.build_x86_64.outputs.package_created }}
with:
os: ${{ github.event.inputs.os }}
plan_artifact: build-plan
dmg_artifact: dmg
plan_artifact: x86_64-build-plan
dmg_artifact: x86_64-dmg
test_build_name: ${{ github.event.inputs.test_build_name }}
update_casks: true
secrets:
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
# ----------------------------------------------------------------------------
# Build arm64 version of Emacs
# ----------------------------------------------------------------------------
build_arm64:
name: Build (arm64)
if: ${{ github.event.inputs.arm64 == 'true' }}
uses: ./.github/workflows/_build.yml
needs: [prepare]
with:
os: ${{ github.event.inputs.os }}
build_os: "macos-13-xlarge" # Only macos-13-xlarge has arm64 support.
artifact_prefix: "arm64-"
git_ref: ${{ github.event.inputs.git_ref }}
git_sha: ${{ github.event.inputs.git_sha }}
build_args: ${{ github.event.inputs.builder_args }}
test_build_name: ${{ github.event.inputs.test_build_name }}
test_release_type: ${{ github.event.inputs.test_release_type }}
secrets:
APPLE_DEVELOPER_CERTIFICATE_P12_BASE64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
APPLE_DEVELOPER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
AC_USERNAME: ${{ secrets.AC_USERNAME }}
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
AC_PROVIDER: ${{ secrets.AC_PROVIDER }}
AC_SIGN_IDENTITY: ${{ secrets.AC_SIGN_IDENTITY }}
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
release_arm64:
name: Release (arm64)
uses: ./.github/workflows/_release.yml
needs: [build_arm64]
if: ${{ needs.build_arm64.outputs.package_created }}
with:
os: ${{ github.event.inputs.os }}
plan_artifact: arm64-build-plan
dmg_artifact: arm64-dmg
test_build_name: ${{ github.event.inputs.test_build_name }}
update_casks: false
secrets:
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}

View File

@@ -1,46 +0,0 @@
---
name: Nightly (emacs-29)
on:
schedule:
- cron: "0 23 * * *"
workflow_dispatch:
inputs:
git_sha:
description: Override Emacs git commit SHA to build
required: false
jobs:
prepare:
name: Prepare
uses: ./.github/workflows/_prepare.yml
secrets:
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
build:
name: Build
needs: [prepare]
uses: ./.github/workflows/_build.yml
with:
os: macos-11
git_ref: emacs-29
git_sha: ${{ github.event.inputs.git_sha }}
build_args: --native-comp
secrets:
APPLE_DEVELOPER_CERTIFICATE_P12_BASE64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
APPLE_DEVELOPER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
AC_USERNAME: ${{ secrets.AC_USERNAME }}
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
AC_PROVIDER: ${{ secrets.AC_PROVIDER }}
AC_SIGN_IDENTITY: ${{ secrets.AC_SIGN_IDENTITY }}
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
release:
name: Release
needs: [build]
uses: ./.github/workflows/_release.yml
with:
plan_artifact: build-plan
dmg_artifact: dmg
secrets:
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}

View File

@@ -2,31 +2,39 @@
name: Nightly (master)
on:
schedule:
- cron: "0 23 * * *"
- cron: "0 23 1 * *"
- cron: "0 23 2-31 * *"
workflow_dispatch:
inputs:
git_sha:
description: Override Emacs git commit SHA to build
required: false
arm64:
description: "Build arm64 version of Emacs?"
required: false
default: false
type: boolean
jobs:
prepare:
name: Prepare
uses: ./.github/workflows/_prepare.yml
with:
os: macos-11
secrets:
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
build:
name: Build
needs: [prepare]
# ----------------------------------------------------------------------------
# Build x86_64 version of Emacs
# ----------------------------------------------------------------------------
build_x86_64:
name: Build (x86_64)
uses: ./.github/workflows/_build.yml
needs: [prepare]
with:
os: macos-11
git_ref: master
build_os: "macos-12"
artifact_prefix: "x86_64-"
git_ref: "master"
git_sha: ${{ github.event.inputs.git_sha }}
build_args: --native-comp
secrets:
APPLE_DEVELOPER_CERTIFICATE_P12_BASE64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
APPLE_DEVELOPER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
@@ -37,13 +45,50 @@ jobs:
AC_SIGN_IDENTITY: ${{ secrets.AC_SIGN_IDENTITY }}
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
release:
name: Release
needs: [build]
release_x86_64:
name: Release (x86_64)
uses: ./.github/workflows/_release.yml
needs: [build_x86_64]
if: ${{ needs.build_x86_64.outputs.package_created }}
with:
os: macos-11
plan_artifact: build-plan
dmg_artifact: dmg
plan_artifact: x86_64-build-plan
dmg_artifact: x86_64-dmg
update_casks: true
secrets:
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
# ----------------------------------------------------------------------------
# Build arm64 version of Emacs
# ----------------------------------------------------------------------------
build_arm64:
name: Build (arm64)
if: github.event.inputs.arm64 || github.event.schedule == '0 23 1 * *'
uses: ./.github/workflows/_build.yml
needs: [prepare]
with:
build_os: "macos-13-xlarge" # Only macos-13-xlarge has arm64 support.
artifact_prefix: "arm64-"
git_ref: "master"
git_sha: ${{ github.event.inputs.git_sha }}
secrets:
APPLE_DEVELOPER_CERTIFICATE_P12_BASE64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
APPLE_DEVELOPER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
AC_USERNAME: ${{ secrets.AC_USERNAME }}
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
AC_PROVIDER: ${{ secrets.AC_PROVIDER }}
AC_SIGN_IDENTITY: ${{ secrets.AC_SIGN_IDENTITY }}
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}
release_arm64:
name: Release (arm64)
uses: ./.github/workflows/_release.yml
needs: [build_arm64]
if: ${{ needs.build_arm64.outputs.package_created }}
with:
plan_artifact: arm64-build-plan
dmg_artifact: arm64-dmg
update_casks: false
secrets:
TAP_REPO_TOKEN: ${{ secrets.TAP_REPO_TOKEN }}