diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8ca72ff1..ac47d77e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,11 +1,6 @@ -name: Bob the Builder +name: Build Infix on: - pull_request: - types: [opened, synchronize, reopened, labeled] - push: - branches: - - main workflow_dispatch: inputs: minimal: @@ -18,13 +13,17 @@ on: required: false default: true type: boolean + + workflow_call: + inputs: + target: + required: true + type: string jobs: build: - name: Build Infix ${{ matrix.target }} + name: Build Infix ${{ inputs.target }} runs-on: [ self-hosted, latest ] strategy: - matrix: - target: [aarch64, x86_64] fail-fast: false outputs: build_id: ${{ steps.vars.outputs.INFIX_BUILD_ID }} @@ -70,7 +69,7 @@ jobs: flavor="" fi fi - target=${{ matrix.target }} + target=${{ inputs.target }} echo "dir=infix-$target" >> $GITHUB_OUTPUT echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT echo "flv=$flavor" >> $GITHUB_OUTPUT @@ -88,16 +87,16 @@ jobs: uses: actions/cache@v4 with: path: .ccache/ - key: ccache-${{ matrix.target }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }} + key: ccache-${{ inputs.target }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }} restore-keys: | - ccache-${{ matrix.target }}- + ccache-${{ inputs.target }}- ccache- - - name: Configure ${{ matrix.target }}${{ steps.vars.outputs.flv }} + - name: Configure ${{ inputs.target }}${{ steps.vars.outputs.flv }} run: | - make ${{ matrix.target }}${{ steps.vars.outputs.flv }}_defconfig + make ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig - - name: Unit Test ${{ matrix.target }} + - name: Unit Test ${{ inputs.target }} run: | make test-unit @@ -115,9 +114,9 @@ jobs: fi echo "MAKE=$MAKE" >> $GITHUB_OUTPUT - - name: Build ${{ matrix.target }}${{ steps.vars.outputs.flv }} + - name: Build ${{ inputs.target }}${{ steps.vars.outputs.flv }} run: | - echo "Building ${{ matrix.target }}${{ steps.vars.outputs.flv }}_defconfig ..." + echo "Building ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig ..." eval "${{ steps.parallel.outputs.MAKE }}" - name: Check SBOM from Build @@ -139,7 +138,7 @@ jobs: printf "Size of output/images/: " ls -l output/images/ - - name: Prepare ${{ matrix.target }} Artifact + - name: Prepare ${{ inputs.target }} Artifact run: | cd output/ mv images ${{ steps.vars.outputs.dir }} @@ -149,111 +148,4 @@ jobs: - uses: actions/upload-artifact@v4 with: path: output/${{ steps.vars.outputs.tgz }} - name: artifact-${{ matrix.target }} - - test: - name: Regression Test of Infix x86_64 - needs: build - runs-on: [ self-hosted, regression ] - steps: - - uses: actions/checkout@v4 - with: - clean: true - submodules: recursive - - - name: Set Build Variables - id: vars - run: | - if [ -n "${{ needs.build.outputs.build_id }}" ]; then - echo "INFIX_BUILD_ID=${{ needs.build.outputs.build_id }}" \ - >>$GITHUB_ENV - fi - - if [ "$GITHUB_REF_NAME" != "main" ]; then - flavor="_minimal" - else - flavor="" - fi - echo "flv=$flavor" >> $GITHUB_OUTPUT - - - name: Configure x86_64${{ steps.vars.outputs.flv }} - run: | - make x86_64${{ steps.vars.outputs.flv }}_defconfig - - - uses: actions/download-artifact@v4 - with: - pattern: "artifact-*" - merge-multiple: true - - - name: Restore x86-64${{ steps.vars.outputs.flv }} output/ - run: | - ls -l - mkdir -p output - mv infix-x86_64.tar.gz output/ - cd output/ - tar xf infix-x86_64.tar.gz - ln -s infix-x86_64 images - - - name: Regression Test x86_64${{ steps.vars.outputs.flv }} - run: | - make test - - - name: Publish Test Result for x86_64${{ steps.vars.outputs.flv }} - # Ensure this runs even if Regression Test fails - if: always() - run: cat test/.log/last/result-gh.md >> $GITHUB_STEP_SUMMARY - - - name: Generate Test Report for x86_64${{ steps.vars.outputs.flv }} - # Ensure this runs even if Regression Test fails - if: always() - run: | - asciidoctor-pdf \ - --theme test/9pm/report/theme.yml \ - -a pdf-fontsdir=test/9pm/report/fonts \ - test/.log/last/report.adoc \ - -o test/.log/last/report.pdf - - - name: Upload Test Report as Artifact - uses: actions/upload-artifact@v4 - with: - name: test-report - path: test/.log/last/report.pdf - - release: - if: ${{github.repository_owner == 'kernelkit' && github.ref_name == 'main'}} - name: Upload Latest Build - needs: test - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - uses: actions/download-artifact@v4 - with: - pattern: "artifact-*" - merge-multiple: true - - - name: Create checksums ... - run: | - for file in *.tar.gz; do - sha256sum $file > $file.sha256 - done - - - uses: ncipollo/release-action@v1 - with: - allowUpdates: true - omitName: true - omitBody: true - omitBodyDuringUpdate: true - prerelease: true - tag: "latest" - token: ${{ secrets.GITHUB_TOKEN }} - artifacts: "*.tar.gz*" - - - name: Summary - run: | - cat <> $GITHUB_STEP_SUMMARY - # Latest Build Complete! :rocket: - - For the public download links of these build artifacts, please see: - - EOF + name: artifact-${{ inputs.target }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..353fef69 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,43 @@ +name: Publish latest Infix + +on: + workflow_dispatch: + workflow_call: + +jobs: + publish: + name: Upload Latest Build + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/download-artifact@v4 + with: + pattern: "artifact-*" + merge-multiple: true + + - name: Create checksums ... + run: | + for file in *.tar.gz; do + sha256sum $file > $file.sha256 + done + + - uses: ncipollo/release-action@v1 + with: + allowUpdates: true + omitName: true + omitBody: true + omitBodyDuringUpdate: true + prerelease: true + tag: "latest" + token: ${{ secrets.GITHUB_TOKEN }} + artifacts: "*.tar.gz*" + + - name: Summary + run: | + cat <> $GITHUB_STEP_SUMMARY + # Latest Build Complete! :rocket: + + For the public download links of these build artifacts, please see: + + EOF diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..e0b942cd --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,78 @@ +name: Test Infix + +on: + workflow_dispatch: + workflow_call: + inputs: + target: + required: true + type: string + +jobs: + test: + name: Regression Test of Infix x86_64 + runs-on: [ self-hosted, regression ] + steps: + - uses: actions/checkout@v4 + with: + clean: true + submodules: recursive + + - name: Set Build Variables + id: vars + run: | + if [ -n "${{ needs.build.outputs.build_id }}" ]; then + echo "INFIX_BUILD_ID=${{ needs.build.outputs.build_id }}" \ + >>$GITHUB_ENV + fi + + if [ "$GITHUB_REF_NAME" != "main" ]; then + flavor="_minimal" + else + flavor="" + fi + echo "flv=$flavor" >> $GITHUB_OUTPUT + + - name: Configure x86_64${{ steps.vars.outputs.flv }} + run: | + make x86_64${{ steps.vars.outputs.flv }}_defconfig + + - uses: actions/download-artifact@v4 + with: + pattern: "artifact-*" + merge-multiple: true + + - name: Restore x86-64${{ steps.vars.outputs.flv }} output/ + run: | + ls -l + mkdir -p output + mv infix-x86_64.tar.gz output/ + cd output/ + tar xf infix-x86_64.tar.gz + ln -s infix-x86_64 images + + - name: Regression Test x86_64${{ steps.vars.outputs.flv }} + run: | + make test + + - name: Publish Test Result for x86_64${{ steps.vars.outputs.flv }} + # Ensure this runs even if Regression Test fails + if: always() + run: cat test/.log/last/result-gh.md >> $GITHUB_STEP_SUMMARY + + - name: Generate Test Report for x86_64${{ steps.vars.outputs.flv }} + # Ensure this runs even if Regression Test fails + if: always() + run: | + asciidoctor-pdf \ + --theme test/9pm/report/theme.yml \ + -a pdf-fontsdir=test/9pm/report/fonts \ + test/.log/last/report.adoc \ + -o test/.log/last/report.pdf + + - name: Upload Test Report as Artifact + uses: actions/upload-artifact@v4 + with: + name: test-report + path: test/.log/last/report.pdf + diff --git a/.github/workflows/trigger.yml b/.github/workflows/trigger.yml new file mode 100644 index 00000000..ff602bfe --- /dev/null +++ b/.github/workflows/trigger.yml @@ -0,0 +1,32 @@ +name: Self Trigger + +on: + pull_request: + types: [opened, synchronize, reopened, labeled] + push: + branches: + - main + - ci-workflow-redesign + workflow_dispatch: + +jobs: + build-x86_64: + uses: ./.github/workflows/build.yml + with: + target: x86_64 + + build-aarch64: + uses: ./.github/workflows/build.yml + with: + target: aarch64 + + test-run-x86_64: + needs: build-x86_64 + uses: ./.github/workflows/test.yml + with: + target: x86_64 + + test-publish-x86_64: + needs: test-run-x86_64 + uses: ./.github/workflows/publish.yml +