Compare commits

...

16 Commits

Author SHA1 Message Date
4142f78ed1 chore(deps): update build-emacs-for-macos to 0.6.61 2025-08-13 01:43:28 +01:00
0bdcc26ff7 docs(readme): update Homebrew Cask section 2025-06-28 16:46:45 +01:00
f77bef8017 chore(deps): update build-emacs-for-macos to 0.6.60 2025-06-27 22:45:03 +01:00
2304c38620 chore(deps): update build-emacs-for-macos to 0.6.59 2025-06-27 15:37:56 +01:00
d8ad016739 Merge pull request #53 from jimeh/upgrade-nix-actions 2025-06-27 15:16:24 +01:00
b8192fb788 fix(release): dmg build step success check 2025-06-27 15:13:35 +01:00
51fba0905b chore(deps): upgarde nix GitHub Actions 2025-06-27 12:34:04 +01:00
f73c57be55 feat(builds): update build-emacs-for-macos to 0.6.58 and add build variant option 2025-06-27 12:23:16 +01:00
d66071efc4 chore(deps): update build-emacs-for-macos to 0.6.57 2024-12-08 14:08:16 +00:00
5f2c9eef19 chore(deps): update build-emacs-for-macos to 0.6.55 2024-12-03 00:20:33 +00:00
b381cba4fa fix(workflow/_prepare): fix typo in default ref logic 2024-12-02 19:54:16 +00:00
d40d900d61 refactor(workflows): simplify default builder_ref setting
Allow the default builder_ref to be set in the a single location, the
_prepare shared workflow. Other workflows essentially have a override
option, and no longer need explicit default values set.
2024-12-02 19:51:29 +00:00
d81f9a1229 fix(nightly): remove supurflous inputs from nightly-master workflow
They're not needed for manual runs, and they were actively causing
things to break when triggered by the schedule.
2024-12-02 19:37:33 +00:00
93ad41d01a chore(deps): update build-emacs-for-macos to 0.6.54 2024-12-01 12:41:17 +00:00
c5db478e64 docs(readme): add update about new Apple Silicon nightly builds 2024-12-01 04:45:34 +00:00
c554cdeb31 chore(deps): update build-emacs-for-macos to 0.6.53 2024-12-01 03:54:14 +00:00
7 changed files with 101 additions and 97 deletions

View File

@@ -13,13 +13,17 @@ on:
type: string
builder_ref:
description: "Git ref to checkout of build-emacs-for-macos"
required: true
required: false
type: string
builder_args:
description: Custom arguments passed to build script
required: false
default: ""
type: string
build_variant:
description: "Optional build number used as version suffix"
required: false
type: string
test_build_name:
description: "Test build name"
required: false
@@ -65,6 +69,7 @@ jobs:
git_ref: ${{ inputs.git_ref }}
git_sha: ${{ inputs.git_sha }}
build_args: ${{ inputs.builder_args }}
build_variant: ${{ inputs.build_variant }}
test_build_name: ${{ inputs.test_build_name }}
test_release_type: ${{ inputs.test_release_type }}
secrets: inherit
@@ -104,6 +109,7 @@ jobs:
git_ref: ${{ inputs.git_ref }}
git_sha: ${{ inputs.git_sha }}
build_args: ${{ inputs.builder_args }}
build_variant: ${{ inputs.build_variant }}
test_build_name: ${{ inputs.test_build_name }}
test_release_type: ${{ inputs.test_release_type }}
secrets: inherit

View File

@@ -34,6 +34,10 @@ on:
description: Custom arguments passed to build script
type: string
required: false
build_variant:
description: "Optional build number used as version suffix"
type: string
required: false
test_build_name:
description: "Test build name"
type: string
@@ -66,8 +70,8 @@ jobs:
path: bin
- name: Ensure emacs-builder is executable
run: chmod +x bin/emacs-builder
- uses: nixbuild/nix-quick-install-action@v29
- uses: nix-community/cache-nix-action@v5
- uses: nixbuild/nix-quick-install-action@v32
- uses: nix-community/cache-nix-action@v6
with:
primary-key: nix-${{ runner.arch }}-${{ hashFiles('**/flake.*') }}
- name: Install dependencies
@@ -77,6 +81,11 @@ jobs:
if: inputs.test_build_name != ''
run: >-
echo "args=--test-build '${{ inputs.test_build_name }}' --test-release-type '${{ inputs.test_release_type }}'" >> "$GITHUB_OUTPUT"
- name: Prepare build variant args
id: build_variant_args
if: inputs.build_variant != ''
run: >-
echo "args=--build-variant ${{ inputs.build_variant }}" >> "$GITHUB_OUTPUT"
- name: Set git SHA override
id: emacs_sha
if: inputs.git_sha != ''
@@ -87,6 +96,7 @@ jobs:
nix develop --command
bin/emacs-builder -l debug plan --output build-plan.yml
--output-dir '${{ github.workspace }}/builds'
${{ steps.build_variant_args.outputs.args }}
${{ steps.test_plan_args.outputs.args }}
${{ steps.emacs_sha.outputs.sha }}
'${{ inputs.git_ref }}'
@@ -122,8 +132,8 @@ jobs:
repository: jimeh/build-emacs-for-macos
ref: ${{ inputs.builder_ref }}
path: builder
- uses: nixbuild/nix-quick-install-action@v29
- uses: nix-community/cache-nix-action@v5
- uses: nixbuild/nix-quick-install-action@v32
- uses: nix-community/cache-nix-action@v6
with:
primary-key: nix-${{ runner.arch }}-${{ hashFiles('**/flake.*') }}
- name: Download build-plan artifact

View File

@@ -5,30 +5,41 @@ on:
inputs:
builder_ref:
description: Git ref to checkout of build-emacs-for-macos
required: true
required: false
type: string
default: ""
outputs:
builder_ref:
description: Git ref of build-emacs-for-macos at builder_ref
value: ${{ jobs.builder-sha.outputs.ref }}
builder_sha:
description: Git SHA of build-emacs-for-macos at builder_ref
description: Git commit SHA of build-emacs-for-macos at builder_ref
value: ${{ jobs.builder-sha.outputs.sha }}
jobs:
builder-sha:
runs-on: "macos-13"
outputs:
sha: ${{ steps.builder_sha.outputs.sha }}
ref: ${{ steps.ref.outputs.ref }}
sha: ${{ steps.sha.outputs.sha }}
steps:
- name: Default git ref check
id: ref
run: |
DEFAULT_BUILDER_REF="v0.6.61"
BUILDER_REF="${{ inputs.builder_ref }}"
echo "ref=${BUILDER_REF:-$DEFAULT_BUILDER_REF}" >> "$GITHUB_OUTPUT"
- name: Checkout build-emacs-for-macos repo
uses: actions/checkout@v4
with:
repository: jimeh/build-emacs-for-macos
ref: ${{ inputs.builder_ref }}
ref: ${{ steps.ref.outputs.ref }}
- name: Store builder Git SHA
id: builder_sha
id: sha
run: |
BUILDER_SHA="$(git rev-parse HEAD)"
echo "$BUILDER_SHA" > build-emacs-for-macos-git-sha.txt
echo "sha=$BUILDER_SHA" >> $GITHUB_OUTPUT
echo "sha=$BUILDER_SHA" >> "$GITHUB_OUTPUT"
echo "Builder ref ${{ inputs.builder_ref }} resolved to" \
"commit SHA: $BUILDER_SHA"
- name: Upload builder git SHA artifact
@@ -58,7 +69,7 @@ jobs:
uses: actions/checkout@v4
with:
repository: jimeh/build-emacs-for-macos
ref: ${{ inputs.builder_ref }}
ref: ${{ needs.builder-sha.outputs.ref }}
fetch-depth: 0
- name: Setup Go
if: steps.cache.outputs.cache-hit != 'true'

View File

@@ -49,11 +49,11 @@ jobs:
name: ${{ inputs.dmg_artifact }}
path: builds
- name: Publish disk images to a GitHub Release
if: steps.dmg.outputs.result != 'fail'
if: steps.dmg.outcome != 'failure'
run: >-
bin/emacs-builder -l debug release --plan build-plan.yml publish
$(find builds -name '*.dmg' -or -name '*.sha256')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: echo 'No DMG artifact available, was there a new commit to build?'
if: steps.dmg.outputs.result == 'fail'
if: steps.dmg.outcome == 'failure'

View File

@@ -11,9 +11,9 @@ on:
description: Override Emacs git commit SHA to build
required: false
builder_ref:
description: "Git ref to checkout of build-emacs-for-macos"
required: true
default: "v0.6.52"
description: "Override git ref to checkout of build-emacs-for-macos"
required: false
default: ""
builder_args:
description: Custom arguments passed to build script
required: false
@@ -26,6 +26,10 @@ on:
description: "prerelease or draft"
required: false
default: ""
build_variant:
description: "Optional build number used as version suffix"
required: false
type: string
x86_64:
description: "Build x86_64 version of Emacs"
required: false
@@ -46,6 +50,7 @@ jobs:
git_sha: ${{ inputs.git_sha }}
builder_ref: ${{ inputs.builder_ref }}
builder_args: ${{ inputs.builder_args }}
build_variant: ${{ inputs.build_variant }}
test_build_name: ${{ inputs.test_build_name }}
test_release_type: ${{ inputs.test_release_type }}
x86_64: ${{ inputs.x86_64 }}

View File

@@ -8,20 +8,6 @@ on:
git_sha:
description: Override Emacs git commit SHA to build
required: false
builder_ref:
description: "Git ref to checkout of build-emacs-for-macos"
required: true
default: "v0.6.52"
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: true
type: boolean
jobs:
build:
@@ -30,7 +16,4 @@ jobs:
with:
git_ref: "master"
git_sha: ${{ inputs.git_sha }}
builder_ref: ${{ inputs.builder_ref }}
x86_64: ${{ inputs.x86_64 }}
arm64: ${{ inputs.arm64 }}
secrets: inherit

115
README.md
View File

@@ -26,12 +26,12 @@
## Features
- Self-contained Emacs.app application bundle, with no external dependencies.
- Native compilation ([gccemacs][]), only in Emacs 28.x and later builds.
- Native JSON parsing via libjansson.
- Native compilation ([gccemacs][]).
- Native JSON parsing.
- SVG rendering via librsvg.
- Various image formats are supported via macOS native image APIs.
- Xwidget-webkit support is enabled, allowing access to a embedded WebKit-based
browser with `M-x xwidget-webkit-browse-url`.
- Xwidget-webkit support, allowing access to a embedded WebKit-based browser
with `M-x xwidget-webkit-browse-url`.
- Native XML parsing via libxml2.
- Dynamic module loading.
- Includes the [fix-window-role][], [system-appearance][], and
@@ -56,11 +56,13 @@
## System Requirements
- macOS 13 Ventura or later for Apple Silicon builds.
- macOS 12 Monterey or later for Intel builds, which can run on Apple Silicon
via Rosetta2.
- Builds produced after 2024-11-30:
- macOS 11 or later.
- Builds produced before 2024-11-30:
- macOS 13 Ventura or later for Apple Silicon builds.
- macOS 12 Monterey or later for Intel builds.
- Xcode Command Line Tools to use native compilation in Emacs, available since
28.x.
Emacs 28.x builds.
## Installation
@@ -80,59 +82,37 @@ for at least a day or two without any obvious issues.
### Homebrew Cask
1. Install the
[`jimeh/emacs-builds`](https://github.com/jimeh/homebrew-emacs-builds)
Homebrew tap:
```
brew tap jimeh/emacs-builds
```
2. Install one of the available casks:
- `emacs-app` — Latest stable release of Emacs.
```
brew install --cask emacs-app
```
- `emacs-app-pretest` — Latest pretest build of Emacs.
```
brew install --cask emacs-app-pretest
```
- `emacs-app-nightly` — Build of Emacs from the `master` branch, updated
every night.
```
brew install --cask emacs-app-nightly
```
- `emacs-app-monthly` — Build of Emacs from the `master` branch, updated on
the 1st of each month. These includes native Apple Silicon support.
```
brew install --cask emacs-app-monthly
```
- `emacs-app-good` for the latest known good nightly build listed on [#7][7]:
```
brew install --cask emacs-app-good
```
The [`jimeh/emacs-builds`](https://github.com/jimeh/homebrew-emacs-builds)
Homebrew Tap provides the following casks:
[7]: https://github.com/jimeh/emacs-builds/issues/7
- `jimeh/emacs-builds/emacs-app` — Latest stable release of Emacs.
```bash
brew install --cask jimeh/emacs-builds/emacs-app
```
- `jimeh/emacs-builds/emacs-app-pretest` — Latest pretest build of Emacs.
```bash
brew install --cask jimeh/emacs-builds/emacs-app-pretest
```
- `jimeh/emacs-builds/emacs-app-nightly` — Build of Emacs from the `master`
branch, updated every night.
```bash
brew install --cask jimeh/emacs-builds/emacs-app-nightly
```
- `jimeh/emacs-builds/emacs-app-monthly` — Build of Emacs from the `master`
branch, updated on the 1st of each month.
```bash
brew install --cask jimeh/emacs-builds/emacs-app-monthly
```
- `jimeh/emacs-builds/emacs-app-good` for the latest known good nightly build
listed on [#7][7]:
```bash
brew install --cask jimeh/emacs-builds/emacs-app-good
```
## Apple Silicon
Native builds for Apple Silicon is supported, but currently GitHub's M1-based
Actions Runners are prohibitively expensive for nightly builds. Intel builds
though do work on Apple Silicon machines via Rosetta2, with a minor performance
impact.
Due to the costs, Apple Silicon builds are for now only scheduled for the 1st of
each month. The `emacs-app-monthly` Homebrew Cask will always be pointing at a
release that includes Intel and Apple Silicon builds.
Builds for stable releases of Emacs will also include both Intel and Apple
Silicon builds.
### Costs
At time of writing (2023-11-21), an average Apple Silicon build uses around 17
minutes of billable time, at a cost of $0.16 USD per minute, that comes out to
around $2.72 per build. I am considering enabling sponsorship on this repository
in an effort to cover the costs for more frequent Apple Silicon builds, and will
update here if/when I have any news.
As of 2024-11-30, all builds include both Apple Silicon (arm64) and Intel
(x86_64) artifacts.
## Use Emacs.app as `emacs` CLI Tool
@@ -173,13 +153,11 @@ use the alias from the above example.
## Build Process
Building Emacs is done using the [jimeh/build-emacs-for-macos][] build script,
executed within a GitHub Actions [workflow][]. This is why macOS 11.x (Big Sur)
or later is required, as it's the oldest version of macOS available in GitHub
Actions.
executed within a GitHub Actions [workflow][].
[jimeh/build-emacs-for-macos]: https://github.com/jimeh/build-emacs-for-macos
[workflow]:
https://github.com/jimeh/emacs-builds/blob/main/.github/workflows/build.yml
https://github.com/jimeh/emacs-builds/blob/main/.github/workflows/nightly-master.yml
Full history for all builds is available on GitHub Actions [here][actions].
Build logs are only retained by GitHub for 90 days though.
@@ -209,8 +187,6 @@ All builds also come with a SHA256 checksum file, which itself can be double
checked against the SHA256 checksum log output from the packaging step of the
GitHub Actions workflow run which produced the build.
[emacs-mirror/emacs]: https://github.com/emacs-mirror/emacs
## Issues / To-Do
Please see [Issues][] for details of things to come, or to report issues.
@@ -219,6 +195,19 @@ Please see [Issues][] for details of things to come, or to report issues.
## News / Recent Changes
### 2024-12-01 — Apple Silicon builds all the time, more stability via Nix
GitHub's standard runner for macOS 14 and later runs on Apple Silicon, and are
free to use for public repositories. As such we now use `runs-on: macos-13` for
Intel builds, and `runs-on: macos-14` for Apple Silicon builds. And we do so on
all builds, nightlies, pretests, and stable.
Additionally, macOS 11 Big Sur is now the minimum required version again, for
both Intel and Apple Silicon builds. This is due to switching from Homebrew to
Nix for managing build-time dependencies. And it supports easily switching
between different macOS SDK versions, meaning we can target an SDK that is older
than the OS we are creating the builds on.
### 2023-11-22 — Apple Silicon builds, drop macOS 11 support
Apple Silicon builds are now available, but limited to stable releases, and