aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/packages.yml
blob: 05f089e66ec1e159fef62c7a340aa4bb425cb2cd (plain)
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
name: Build all core packages

on:
  pull_request:
    paths:
      - '.github/workflows/packages.yml'
      - 'config/**'
      - 'include/**'
      - 'package/**'
      - 'target/linux/generic/**'
      - 'toolchain/**'
  push:
    paths:
      - '.github/workflows/packages.yml'
      - 'config/**'
      - 'include/**'
      - 'package/**'
      - 'target/linux/generic/**'
      - 'toolchain/**'

permissions:
  contents: read

jobs:
  setup_build:
    name: Setup build
    runs-on: ubuntu-latest
    outputs:
      owner_lc: ${{ steps.lower_owner.outputs.owner_lc }}

    steps:
      - name: Set lower case owner name
        id: lower_owner
        run: |
          OWNER_LC=$(echo "${{ github.repository_owner }}" \
            | tr '[:upper:]' '[:lower:]')
          echo "owner_lc=$OWNER_LC" >> $GITHUB_OUTPUT

  build:
    name: Build all core packages
    needs: setup_build
    runs-on: ubuntu-latest
    strategy:
      fail-fast: False
      matrix:
        include:
          - name: malta-be
            target: malta
            subtarget: be
          - name: x86-64
            target: x86
            subtarget: 64

    container: ghcr.io/${{ needs.setup_build.outputs.owner_lc }}/tools:latest

    permissions:
      contents: read
      packages: read

    steps:
      - name: Checkout master directory
        uses: actions/checkout@v3
        with:
          path: openwrt

      - name: Fix permission
        run: |
          chown -R buildbot:buildbot openwrt

      - name: Initialization environment
        run: |
          TARGET=$(echo ${{ matrix.target }})
          SUBTARGET=$(echo ${{ matrix.subtarget }})
          echo "TARGET=$TARGET" >> "$GITHUB_ENV"
          echo "SUBTARGET=$SUBTARGET" >> "$GITHUB_ENV"

      - name: Parse toolchain file
        working-directory: openwrt
        run: |
          TOOLCHAIN_STRING="$(curl "https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/sha256sums" \
            | grep ".*openwrt-toolchain.*tar.xz")"
          TOOLCHAIN_FILE=$(echo "$TOOLCHAIN_STRING" | sed -n -e 's/.*\(openwrt-toolchain.*\).tar.xz/\1/p')
          TOOLCHAIN_SHA256=$(echo "$TOOLCHAIN_STRING" | cut -d ' ' -f 1)

          echo "TOOLCHAIN_FILE=$TOOLCHAIN_FILE" >> "$GITHUB_ENV"
          echo "TOOLCHAIN_SHA256=$TOOLCHAIN_SHA256" >> "$GITHUB_ENV"

      - name: Cache external toolchain
        id: cache-external-toolchain
        uses: actions/cache@v3
        with:
          path: openwrt/${{ env.TOOLCHAIN_FILE }}
          key: ${{ env.TOOLCHAIN_FILE }}-${{ env.TOOLCHAIN_SHA256 }}

      - name: Download external toolchain
        if: steps.cache-external-toolchain.outputs.cache-hit != 'true'
        shell: su buildbot -c "sh -e {0}"
        working-directory: openwrt
        run: |
          wget -O - https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/${TOOLCHAIN_FILE}.tar.xz \
            | tar --xz -xf -

      - name: Extract prebuilt tools
        shell: su buildbot -c "sh -e {0}"
        working-directory: openwrt
        run: ./scripts/ext-tools.sh --tools /tools.tar

      - name: Create configuration
        shell: su buildbot -c "sh -e {0}"
        working-directory: openwrt
        run: |
          echo CONFIG_ALL=y >> .config
          echo CONFIG_ALL_KMODS=y >> .config
          echo CONFIG_ALL_NONSHARED=y >> .config
          echo CONFIG_DEVEL=y >> .config
          echo CONFIG_AUTOREMOVE=y >> .config

          ./scripts/ext-toolchain.sh \
            --toolchain ${{ env.TOOLCHAIN_FILE }}/toolchain-* \
            --overwrite-config \
            --config ${{ env.TARGET }}/${{ env.SUBTARGET }}

      - name: Show configuration
        shell: su buildbot -c "sh -e {0}"
        working-directory: openwrt
        run: ./scripts/diffconfig.sh

      - name: Build tools
        shell: su buildbot -c "sh -e {0}"
        working-directory: openwrt
        run: make tools/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh

      - name: Build toolchain
        shell: su buildbot -c "sh -e {0}"
        working-directory: openwrt
        run: make toolchain/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh

      - name: Build Kernel
        shell: su buildbot -c "sh -e {0}"
        working-directory: openwrt
        run: make target/compile -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh

      - name: Build everything
        shell: su buildbot -c "sh -e {0}"
        working-directory: openwrt
        run: make -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh

      - name: Upload logs
        if: failure()
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.TARGET }}-${{ env.SUBTARGET }}-logs
          path: "openwrt/logs"