diff options
Diffstat (limited to 'github.yml')
-rw-r--r-- | github.yml | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/github.yml b/github.yml new file mode 100644 index 0000000..2d38f93 --- /dev/null +++ b/github.yml @@ -0,0 +1,109 @@ +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: "g7jjw" + layout_geometry: + description: "voyager | moonlander | ergodox_ez | ergodox_ez/stm32/glow | ergodox_ez/stm32/shine | ergodox_ez/m32u4/glow | ergodox_ez/m32u4/shine | planck_ez | planck_ez/glow" + required: true + default: "voyager" + +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, title }}}","variables":{"hashId":"${{ github.event.inputs.layout_id }}","geometry":"${{ github.event.inputs.layout_geometry }}","revisionId":"latest"}}' | jq '.data.layout.revision | [.hashId, .qmkVersion, .title]') + hash_id=$(echo "${response}" | jq -r '.[0]') + firmware_version=$(printf "%.0f" $(echo "${response}" | jq -r '.[1]')) + change_description=$(echo "${response}" | jq -r '.[2]') + if [[ -z "${change_description}" ]]; then + change_description="latest layout modification made with Oryx" + fi + + curl -L "https://oryx.zsa.io/source/${hash_id}" -o source.zip + + echo firmware_version=${firmware_version} >> "$GITHUB_OUTPUT" + echo change_description=${change_description} >> "$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 "github-actions@github.com" + git add . + git commit -m "✨(oryx): ${{ steps.download-layout-source.outputs.change_description }}" || 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 + normalized_layout_geometry="$(echo "${{ github.event.inputs.layout_geometry }}" | sed 's/\//_/g')" + echo built_layout_file=$(find ./qmk_firmware -maxdepth 1 -type f -regex ".*${normalized_layout_geometry}.*\.\(bin\|hex\)$") >> "$GITHUB_OUTPUT" + echo normalized_layout_geometry=${normalized_layout_geometry} >> "$GITHUB_OUTPUT" + + - name: Upload layout + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.build-layout.outputs.normalized_layout_geometry }}_${{ github.event.inputs.layout_id }} + path: ${{ steps.build-layout.outputs.built_layout_file }} |