Fetch and build layout #14
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: Fetch and build layout | |
on: | |
workflow_dispatch: | |
inputs: | |
layout_id: | |
description: "Layout id available in URL https://configure.zsa.io/voyager/layouts/[ID_IS_HERE]/latest" | |
required: true | |
default: "JzWvO" | |
layout_geometry: | |
description: "voyager|moonlander|ergodox_ez" | |
required: true | |
default: "moonlander" | |
permissions: | |
contents: write | |
jobs: | |
fetch-and-build-layout: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
with: | |
ref: oryx | |
- name: Download the full history for the merge to work correctly | |
run: git pull --unshallow | |
- name: Download layout source | |
id: download-layout-source | |
run: | | |
response=$(curl --location 'https://oryx.zsa.io/graphql' --header 'Content-Type: application/json' --data '{"query":"query getLayout($hashId: String!, $revisionId: String!, $geometry: String) {layout(hashId: $hashId, geometry: $geometry, revisionId: $revisionId) { revision { hashId, qmkVersion }}}","variables":{"hashId":"${{ github.event.inputs.layout_id }}","geometry":"${{ github.event.inputs.layout_geometry }}","revisionId":"latest"}}' | jq '.data.layout.revision | [.hashId, .qmkVersion]') | |
hash_id=$(echo "${response}" | jq -r '.[0]') | |
firmware_version=$(printf "%.0f" $(echo "${response}" | jq -r '.[1]')) | |
curl -L "https://oryx.zsa.io/source/${hash_id}" -o source.zip | |
echo firmware_version=${firmware_version} >> "$GITHUB_OUTPUT" | |
- name: Unzip the source file | |
run: | | |
unzip -oj source.zip '*_source/*' -d ${{ github.event.inputs.layout_id }} | |
rm source.zip | |
- name: Commit and Push changes | |
run: | | |
git config --local user.name "github-actions" | |
git config --local user.email "[email protected]" | |
git add . | |
git commit -m "✨ latest layout modification made with Oryx" || echo "No layout change" | |
git push | |
- name: Merge Oryx with custom QMK | |
run: | | |
git fetch origin main | |
git checkout -B main origin/main | |
git merge -Xignore-all-space oryx | |
git push | |
- name: Checkout the right firmware branch | |
run: | | |
cd qmk_firmware | |
git submodule update --init --remote | |
git fetch origin firmware${{ steps.download-layout-source.outputs.firmware_version }} | |
git checkout -B firmware${{ steps.download-layout-source.outputs.firmware_version }} origin/firmware${{ steps.download-layout-source.outputs.firmware_version }} | |
git submodule update --init --recursive | |
- name: Build qmk docker image | |
run: docker build -t qmk . | |
- name: Build the layout | |
id: build-layout | |
run: | | |
# Set keyboard directory and make prefix based on firmware version | |
if [ "${{ steps.download-layout-source.outputs.firmware_version }}" -ge 24 ]; then | |
keyboard_directory="qmk_firmware/keyboards/zsa" | |
make_prefix="zsa/" | |
else | |
keyboard_directory="qmk_firmware/keyboards" | |
make_prefix="" | |
fi | |
# Copy layout files to the qmk folder | |
rm -rf ${keyboard_directory}/${{ github.event.inputs.layout_geometry }}/keymaps/${{ github.event.inputs.layout_id }} | |
mkdir -p ${keyboard_directory}/${{ github.event.inputs.layout_geometry }}/keymaps && cp -r ${{ github.event.inputs.layout_id }} "$_" | |
# Build the layout | |
docker run -v ./qmk_firmware:/root --rm qmk /bin/sh -c " | |
qmk setup zsa/qmk_firmware -b firmware${{ steps.download-layout-source.outputs.firmware_version }} -y | |
make ${make_prefix}${{ github.event.inputs.layout_geometry }}:${{ github.event.inputs.layout_id }} | |
" | |
# Find and export built layout | |
echo built_layout_file=$(find ./qmk_firmware -maxdepth 1 -type f -regex ".*${{ github.event.inputs.layout_geometry }}.*\.\(bin\|hex\)$") >> "$GITHUB_OUTPUT" | |
- name: Upload layout | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ github.event.inputs.layout_geometry }}_${{ github.event.inputs.layout_id }} | |
path: ${{ steps.build-layout.outputs.built_layout_file }} |