Skip to content

Commit

Permalink
Github build action: build Glove80 combined firmware using Nix
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisandreae committed Nov 19, 2023
1 parent c6cc382 commit 1d0836c
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 7 deletions.
13 changes: 7 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ on:

jobs:
build:
if: ${{ always() }}
if: ${{ false }}
runs-on: ubuntu-latest
container:
image: docker.io/zmkfirmware/zmk-build-arm:3.2
Expand Down Expand Up @@ -104,7 +104,7 @@ jobs:
throw new Error('Failed to build one or more configurations');
}
compile-matrix:
if: ${{ always() }}
if: ${{ false && always() }}
runs-on: ubuntu-latest
needs: [core-coverage, board-changes, nightly]
outputs:
Expand Down Expand Up @@ -144,7 +144,7 @@ jobs:
shieldArgs: JSON.stringify(shieldArgs),
}));
core-coverage:
if: ${{ needs.get-changed-files.outputs.core-changes == 'true' }}
if: ${{ false && needs.get-changed-files.outputs.core-changes == 'true' }}
runs-on: ubuntu-latest
needs: get-changed-files
outputs:
Expand Down Expand Up @@ -173,7 +173,7 @@ jobs:
return [...include, ...coreCoverage.include];
board-changes:
if: ${{ needs.get-changed-files.outputs.board-changes == 'true' }}
if: ${{ false && needs.get-changed-files.outputs.board-changes == 'true' }}
runs-on: ubuntu-latest
needs: [get-grouped-hardware, get-changed-files]
outputs:
Expand Down Expand Up @@ -257,7 +257,7 @@ jobs:
});
}))).flat();
nightly:
if: ${{ github.event_name == 'schedule' }}
if: ${{ false && github.event_name == 'schedule' }}
runs-on: ubuntu-latest
needs: get-grouped-hardware
outputs:
Expand Down Expand Up @@ -302,6 +302,7 @@ jobs:
return [...includeOnboard, ...includeInterconnect];
get-grouped-hardware:
if: ${{ false }}
runs-on: ubuntu-latest
outputs:
organized-metadata: ${{ steps.organize-metadata.outputs.result }}
Expand Down Expand Up @@ -379,7 +380,7 @@ jobs:
return JSON.stringify(grouped).replace(/\\/g,"\\\\").replace(/`/g,"\\`");
result-encoding: string
get-changed-files:
if: ${{ github.event_name != 'schedule' }}
if: ${{ false && github.event_name != 'schedule' }}
runs-on: ubuntu-latest
outputs:
changed-files: ${{ steps.changed-files.outputs.all }}
Expand Down
62 changes: 62 additions & 0 deletions .github/workflows/nix-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Build

on:
push:
paths:
- ".github/workflows/nix-build.yml"
- "default.nix"
- "app/**"
- "nix/**"
branches:
- "**"
tags:
- "**"
pull_request:
paths:
- ".github/workflows/nix-build.yml"
- "default.nix"
- "app/**"
- "nix/**"

jobs:
build:
name: Build Glove80 Firmware
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
- uses: cachix/install-nix-action@v20
with:
nix_path: nixpkgs=channel:nixos-22.05
- uses: cachix/cachix-action@v12
with:
name: moergo-glove80-zmk-dev
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
skipPush: "${{ github.repository != 'moergo-sc/zmk' }}"
- name: Build Glove80 combined firmware
run: nix-build -A glove80_combined -o combined
- name: Copy result out of nix store
run: cp combined/glove80.uf2 glove80.uf2
- name: Upload result
uses: actions/upload-artifact@v3
with:
name: glove80.uf2
path: glove80.uf2
release:
name: Create Release for Tag
if: >-
github.repository == 'moergo-sc/zmk'
&& github.event_name == 'push'
&& contains(github.ref, 'refs/tags/v')
needs: build
runs-on: ubuntu-latest
steps:
- name: Download compiled firmware artifact
uses: actions/download-artifact@v3
with:
name: glove80.uf2
- name: Create Release for Tag
uses: ncipollo/release-action@v1
with:
artifacts: "glove80.uf2"
artifactErrorsFailBuild: true
generateReleaseNotes: true
2 changes: 1 addition & 1 deletion default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{ pkgs ? import <nixpkgs> {} }:
{ pkgs ? (import ./nix/pinned-nixpkgs.nix {}) }:
let
inherit (pkgs) newScope;
inherit (pkgs.lib) makeScope;
Expand Down
34 changes: 34 additions & 0 deletions nix/generate-pin.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env ruby
# frozen_string_literal: true

require 'json'
require 'net/http'
require 'shellwords'

def get_channel_url(channel)
uri = URI("https://channels.nixos.org/#{channel}")
res = Net::HTTP.get_response(uri)
raise 'Not a redirect' unless res.is_a?(Net::HTTPRedirection)
res['location']
end

def fetch_tarball(url)
hash = `nix-prefetch-url --unpack #{Shellwords.escape(url)}`
raise 'Prefetch failed' unless $?.success?
hash.chomp
end

def generate_pin(channel)
channel_url = get_channel_url(channel)
nixexprs = "#{channel_url}/nixexprs.tar.xz"
hash = fetch_tarball(nixexprs)
{ url: nixexprs, sha256: hash }
end

def main
channel = ENV.fetch('CHANNEL', 'nixpkgs-unstable')
pin = generate_pin(channel)
puts JSON.pretty_generate(pin)
end

main
4 changes: 4 additions & 0 deletions nix/pinned-nixpkgs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"url": "https://releases.nixos.org/nixpkgs/22.05-darwin/nixpkgs-darwin-22.05pre383202.058d97782ed/nixexprs.tar.xz",
"sha256": "0m00195y7l2b3mrzi26ljm32s24qp5paz15fqbd49iyfjzxv7xb8"
}
17 changes: 17 additions & 0 deletions nix/pinned-nixpkgs.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{ system ? builtins.currentSystem }:

let
pin = builtins.fromJSON (builtins.readFile ./pinned-nixpkgs.json);

nixpkgsSrc = builtins.fetchTarball {
inherit (pin) url sha256;
};
in

import nixpkgsSrc {
inherit system;
config = {
allowUnfree = true;
};
overlays = []; # prevent impure overlays
}

0 comments on commit 1d0836c

Please sign in to comment.