summary refs log tree commit diff stats
path: root/github.yml
blob: 2d38f9361a15786b3e56416ee4f47c7b4e6f0d75 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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 }}