Skip to content

Commit ae51d0e

Browse files
authored
ci: add gh cache to nix action (#87)
Improves GitHub Actions environments and caching, reducing the Nix installation and store setup time from approximately 2 minutes to around 1 minute. - Switches to nixbuild/nix-quick-install-action for Nix setup - Implements Nix cache management with nix-community/cache-nix-action - Creates separate CI devshell with minimal dependencies - Makes version variables in Makefile overridable - Adds .ignore file for search tool configuration Change-Id: Ie564f9efc86b64f2582a2fdbf395a6dba84c3c81 Signed-off-by: Thomas Kosiewski <tk@coder.com>
1 parent 295c5ad commit ae51d0e

File tree

5 files changed

+66
-28
lines changed

5 files changed

+66
-28
lines changed

.github/actions/nix-devshell/action.yaml

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,28 @@ runs:
44
using: "composite"
55
steps:
66
- name: Setup Nix
7-
uses: DeterminateSystems/nix-installer-action@e50d5f73bfe71c2dd0aa4218de8f4afa59f8f81d # v16
7+
uses: nixbuild/nix-quick-install-action@5bb6a3b3abe66fd09bbf250dce8ada94f856a703 # v30
8+
9+
- uses: nix-community/cache-nix-action@92aaf15ec4f2857ffed00023aecb6504bb4a5d3d # v6
10+
with:
11+
# restore and save a cache using this key
12+
primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }}
13+
# if there's no cache hit, restore a cache by this prefix
14+
restore-prefixes-first-match: nix-${{ runner.os }}-
15+
# collect garbage until Nix store size (in bytes) is at most this number
16+
# before trying to save a new cache
17+
# 1 GB = 1073741824 B
18+
gc-max-store-size-linux: 1073741824
19+
# do purge caches
20+
purge: true
21+
# purge all versions of the cache
22+
purge-prefixes: nix-${{ runner.os }}-
23+
# created more than this number of seconds ago relative to the start of the `Post Restore` phase
24+
purge-created: 0
25+
# except the version with the `primary-key`, if it exists
26+
purge-primary-key: never
827

928
- name: Enter devshell
1029
uses: nicknovitski/nix-develop@9be7cfb4b10451d3390a75dc18ad0465bed4932a # v1.2.1
30+
with:
31+
arguments: ".#ci"

.ignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!.github

Makefile

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@ XCPROJECT := Coder\ Desktop/Coder\ Desktop.xcodeproj
1111
SCHEME := Coder\ Desktop
1212
SWIFT_VERSION := 6.0
1313

14-
CURRENT_PROJECT_VERSION:=$(shell git describe --match 'v[0-9]*' --dirty='.devel' --always --tags)
14+
ifndef CURRENT_PROJECT_VERSION
15+
CURRENT_PROJECT_VERSION:=$(shell git describe --match 'v[0-9]*' --dirty='.devel' --always --tags)
16+
endif
1517
ifeq ($(strip $(CURRENT_PROJECT_VERSION)),)
16-
$(error CURRENT_PROJECT_VERSION cannot be empty)
18+
$(error CURRENT_PROJECT_VERSION cannot be empty)
1719
endif
1820

19-
MARKETING_VERSION:=$(shell git describe --match 'v[0-9]*' --tags --abbrev=0 | sed 's/^v//' | sed 's/-.*$$//')
21+
ifndef MARKETING_VERSION
22+
MARKETING_VERSION:=$(shell git describe --match 'v[0-9]*' --tags --abbrev=0 | sed 's/^v//' | sed 's/-.*$$//')
23+
endif
2024
ifeq ($(strip $(MARKETING_VERSION)),)
21-
$(error MARKETING_VERSION cannot be empty)
25+
$(error MARKETING_VERSION cannot be empty)
2226
endif
2327

2428
# Define the keychain file name first

flake.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,26 +53,38 @@
5353
{
5454
inherit formatter;
5555

56-
devShells.default = pkgs.mkShellNoCC {
57-
buildInputs = with pkgs; [
58-
actionlint
59-
apple-sdk_15
60-
clang
61-
coreutils
62-
create-dmg
63-
formatter
64-
gh
65-
gnumake
66-
protobuf_28
67-
protoc-gen-swift
68-
swiftformat
69-
swiftlint
70-
watchexec
71-
xcbeautify
72-
xcodegen
73-
xcpretty
74-
zizmor
75-
];
56+
devShells = rec {
57+
# Need to use a devshell for CI, as we want to reuse the already existing Xcode on the runner
58+
ci = pkgs.mkShellNoCC {
59+
buildInputs = with pkgs; [
60+
actionlint
61+
clang
62+
coreutils
63+
create-dmg
64+
gh
65+
git
66+
gnumake
67+
protobuf_28
68+
protoc-gen-swift
69+
swiftformat
70+
swiftlint
71+
xcbeautify
72+
xcodegen
73+
xcpretty
74+
zizmor
75+
];
76+
};
77+
78+
default = pkgs.mkShellNoCC {
79+
buildInputs =
80+
with pkgs;
81+
[
82+
apple-sdk_15
83+
formatter
84+
watchexec
85+
]
86+
++ ci.buildInputs;
87+
};
7688
};
7789
}
7890
);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy