[openwrt/openwrt] ci: rework and move build-on-comment action
LEDE Commits
lede-commits at lists.infradead.org
Fri Jan 16 03:42:37 PST 2026
aparcar pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/8cff0d8ca0d42aec4cb47313cd0c3dd99e06bbec
commit 8cff0d8ca0d42aec4cb47313cd0c3dd99e06bbec
Author: Paul Spooren <mail at aparcar.org>
AuthorDate: Thu Jan 15 09:19:16 2026 +0700
ci: rework and move build-on-comment action
Run this only when a PR is created, so either author or anyone who can
edit the PR message (all maintainers) can trigger such build.
Instead of maintaining it in the main repository, move it to the
external repository to bloat this repository less with further CI
commits.
Signed-off-by: Paul Spooren <mail at aparcar.org>
---
.github/workflows/build-on-comment.yml | 164 ---------------------------------
.github/workflows/build-pr-profile.yml | 12 +++
2 files changed, 12 insertions(+), 164 deletions(-)
diff --git a/.github/workflows/build-on-comment.yml b/.github/workflows/build-on-comment.yml
deleted file mode 100644
index cbce8afe17..0000000000
--- a/.github/workflows/build-on-comment.yml
+++ /dev/null
@@ -1,164 +0,0 @@
-name: Build on Comment
-
-on:
- issue_comment:
- types: [created, edited]
-
-permissions:
- pull-requests: write
-
-concurrency:
- group: build-on-comment-${{ github.event.issue.number || github.event.pull_request.number }}
- cancel-in-progress: true
-
-jobs:
- check-and-build:
- if: github.event.issue.pull_request != null
- runs-on: ubuntu-latest
-
- steps:
- - name: Check if user is in reviewers team
- id: check-reviewer
- run: |
- USERNAME="${{ github.event.comment.user.login }}"
-
- STATUS_CODE=$(curl -s -H "Authorization: token ${{ secrets.LOOKUP_MEMBERS }}" \
- -o response.json -w "%{http_code}" \
- https://api.github.com/orgs/openwrt/teams/reviewers/memberships/$USERNAME)
-
- if grep -q '"state": "active"' response.json && [ "$STATUS_CODE" -eq 200 ]; then
- echo "authorized=true" >> $GITHUB_OUTPUT
- else
- echo "authorized=false" >> $GITHUB_OUTPUT
- fi
-
- - name: Parse build command
- if: steps.check-reviewer.outputs.authorized == 'true'
- id: parse-command
- run: |
- COMMENT="${{ github.event.comment.body }}"
- if echo "$COMMENT" | grep -q "build [a-zA-Z0-9_-]\+/[a-zA-Z0-9_-]\+/[a-zA-Z0-9_-]\+"; then
- BUILD_PATH=$(echo "$COMMENT" | grep -o "build [a-zA-Z0-9_-]\+/[a-zA-Z0-9_-]\+/[a-zA-Z0-9_-]\+" | sed 's/build //')
- TARGET=$(echo "$BUILD_PATH" | cut -d'/' -f1)
- SUBTARGET=$(echo "$BUILD_PATH" | cut -d'/' -f2)
- PROFILE=$(echo "$BUILD_PATH" | cut -d'/' -f3)
- echo "build_requested=true" >> $GITHUB_OUTPUT
- echo "target=$TARGET" >> $GITHUB_OUTPUT
- echo "subtarget=$SUBTARGET" >> $GITHUB_OUTPUT
- echo "profile=$PROFILE" >> $GITHUB_OUTPUT
- echo "build_path=$BUILD_PATH" >> $GITHUB_OUTPUT
- else
- echo "build_requested=false" >> $GITHUB_OUTPUT
- fi
-
- - name: Find existing build comment
- if: steps.parse-command.outputs.build_requested == 'true'
- id: find-comment
- uses: peter-evans/find-comment at v2
- with:
- issue-number: ${{ github.event.pull_request.number || github.event.issue.number }}
- comment-author: "github-actions[bot]"
-
- - name: Create early build comment
- if: steps.parse-command.outputs.build_requested == 'true'
- id: start-comment
- uses: peter-evans/create-or-update-comment at v3
- with:
- issue-number: ${{ github.event.pull_request.number || github.event.issue.number }}
- comment-id: ${{ steps.find-comment.outputs.comment-id }}
- body: |
- 🚧 **Build in progress for** `${{ steps.parse-command.outputs.build_path }}`...
-
- You can follow progress [here](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
-
- *Triggered by: @${{ github.event.comment.user.login }}*
- edit-mode: replace
-
- - name: Checkout repository
- if: steps.parse-command.outputs.build_requested == 'true'
- uses: actions/checkout at v4
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- fetch-depth: 0
- ref: refs/pull/${{ github.event.issue.number }}/merge
-
- - name: Setup build environment
- if: steps.parse-command.outputs.build_requested == 'true'
- continue-on-error: true
- run: |
- sudo apt-get update
- sudo apt-get install -y build-essential libncurses5-dev gawk git subversion libssl-dev gettext zlib1g-dev swig unzip time rsync
-
- - name: Build target
- if: steps.parse-command.outputs.build_requested == 'true'
- id: build
- run: |
- make defconfig
- echo "CONFIG_DEVEL=y" > .config
- echo "CONFIG_BPF_TOOLCHAIN_HOST=y" >> .config
- echo "CONFIG_TARGET_${{ steps.parse-command.outputs.target }}=y" >> .config
- echo "CONFIG_TARGET_${{ steps.parse-command.outputs.target }}_${{ steps.parse-command.outputs.subtarget }}=y" >> .config
- echo "CONFIG_TARGET_${{ steps.parse-command.outputs.target }}_${{ steps.parse-command.outputs.subtarget }}_DEVICE_${{ steps.parse-command.outputs.profile }}=y" >> .config
-
- make defconfig
- make -j$(nproc) BUILD_LOG=1
-
- echo "build_success=true" >> $GITHUB_OUTPUT
-
- - name: Upload log
- uses: actions/upload-artifact at v4
- if: steps.check-reviewer.outputs.authorized == 'true' && (success() || failure())
- with:
- name: build-log-${{ steps.parse-command.outputs.target }}-${{ steps.parse-command.outputs.subtarget }}-${{ steps.parse-command.outputs.profile }}
- path: logs/
-
- - name: Create artifact archive
- if: steps.build.outputs.build_success == 'true'
- run: |
- cd bin/
- tar -czf ../build-artifacts.tar.gz *
- cd ..
-
- - name: Upload build artifacts
- if: steps.build.outputs.build_success == 'true'
- uses: actions/upload-artifact at v4
- with:
- name: build-${{ steps.parse-command.outputs.target }}-${{ steps.parse-command.outputs.subtarget }}-${{ steps.parse-command.outputs.profile }}
- path: build-artifacts.tar.gz
-
- - name: Update comment with build results
- if: steps.build.outputs.build_success == 'true'
- uses: peter-evans/create-or-update-comment at v3
- with:
- comment-id: ${{ steps.start-comment.outputs.comment-id }}
- issue-number: ${{ github.event.pull_request.number || github.event.issue.number }}
- body: |
- ## Build Results for `${{ steps.parse-command.outputs.build_path }}`
-
- ✅ **Build completed successfully!**
-
- **Target:** `${{ steps.parse-command.outputs.target }}`
- **Subtarget:** `${{ steps.parse-command.outputs.subtarget }}`
- **Profile:** `${{ steps.parse-command.outputs.profile }}`
-
- 📦 **Artifacts:** [Download build-${{ steps.parse-command.outputs.target }}-${{ steps.parse-command.outputs.subtarget }}-${{ steps.parse-command.outputs.profile }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
-
- *Build triggered by: @${{ github.event.comment.user.login }}*
- *Last updated: ${{ github.event.comment.created_at }}*
- edit-mode: replace
-
- - name: Update comment on build failure
- if: steps.parse-command.outputs.build_requested == 'true' && steps.build.outputs.build_success == 'false'
- uses: peter-evans/create-or-update-comment at v3
- with:
- comment-id: ${{ steps.start-comment.outputs.comment-id }}
- issue-number: ${{ github.event.pull_request.number || github.event.issue.number }}
- body: |
- ## Build Results for `${{ steps.parse-command.outputs.build_path }}`
-
- ❌ **Build failed!**
-
- Please check the [action logs](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for more details.
-
- *Build triggered by: @${{ github.event.comment.user.login }}*
- edit-mode: replace
diff --git a/.github/workflows/build-pr-profile.yml b/.github/workflows/build-pr-profile.yml
new file mode 100644
index 0000000000..3be461c354
--- /dev/null
+++ b/.github/workflows/build-pr-profile.yml
@@ -0,0 +1,12 @@
+name: Build PR Profile
+
+on:
+ pull_request:
+ types: [opened, edited, synchronize]
+
+permissions:
+ pull-requests: write
+
+jobs:
+ build-pr-profile:
+ uses: openwrt/actions-shared-workflows/.github/workflows/build-pr-profile.yml at main
More information about the lede-commits
mailing list