name: CI

on:
  push:
    paths-ignore:
      - 'README.md'
  workflow_dispatch:

concurrency:
  group: CI
  cancel-in-progress: false

jobs:
  build-packages:
    name: Build Packages
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
    env:
      owrt-package: blue-merle
      SDK_URL: "https://downloads.openwrt.org/releases/23.05.0/targets/ath79/nand/openwrt-sdk-23.05.0-ath79-nand_gcc-12.3.0_musl.Linux-x86_64.tar.xz"
      SDK_FILENAME: "openwrt-sdk-23.05.0-ath79-nand_gcc-12.3.0_musl.Linux-x86_64.tar.xz"
    steps:
      - uses: actions/checkout@v3
        with:
          ref: ${{ github.event_name == 'push' && github.ref || 'main' }}
      - name: Get the SDK
        run: |
          mkdir sdk
          cd sdk
          wget "${SDK_URL}"
          tar xf "${SDK_FILENAME}"
      - name: Set up package dir
        run: |
          cd "sdk/${SDK_FILENAME%.tar.xz}"
          mkdir package/${{ env.owrt-package }}
          ln -s "${GITHUB_WORKSPACE}"/Makefile package/${{ env.owrt-package }}/
          ln -s "${GITHUB_WORKSPACE}"/files package/${{ env.owrt-package }}/
      - name: Update packages feed
        run: |
          cd "sdk/${SDK_FILENAME%.tar.xz}"
          scripts/feeds update packages >/dev/null
      - name: Set up OpenWrt config
        run: |
          cd "sdk/${SDK_FILENAME%.tar.xz}"
          echo "CONFIG_SIGNED_PACKAGES=n" > .config
          make defconfig
      - name: Build package
        run: |
          cd "sdk/${SDK_FILENAME%.tar.xz}"
          make -j$(nproc) V=s package/${{ env.owrt-package }}/compile
          make -j1 V=s package/index
      - name: Generate artifact name
        id: generate-name
        run: echo "artifact-name=${{ github.event.repository.name }}-${{ github.ref_name }}-${{ github.sha }}" >> $GITHUB_OUTPUT
      - name: Prepare artifact
        run: |
          mkdir package-output
          rsync -av sdk/"${SDK_FILENAME%.tar.xz}"/bin/packages/mips_24kc/base/"${{ env.owrt-package }}"*.ipk package-output/
      - uses: actions/upload-artifact@v3
        with:
          name: ${{ steps.generate-name.outputs.artifact-name }}
          path: package-output/