Add support for Friendlyelec NanoPi Zero2 #1
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Check new board assets exist (images + vendor logos)" | |
| on: | |
| pull_request: | |
| paths: | |
| - "config/boards/**" | |
| env: | |
| WEBSITE_REPO: "armbian/armbian.github.io" | |
| WEBSITE_REF: "main" | |
| BOARDS_PATH: "config/boards" | |
| BOARD_IMAGES_DIR: "board-images" | |
| VENDOR_LOGOS_DIR: "board-vendor-logos" | |
| jobs: | |
| Check: | |
| name: "Verify assets for newly added boards" | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| steps: | |
| - name: "Checkout build repo (PR head)" | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| fetch-depth: 0 | |
| - name: "Checkout armbian.github.io (images repo)" | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: ${{ env.WEBSITE_REPO }} | |
| ref: ${{ env.WEBSITE_REF }} | |
| path: website | |
| fetch-depth: 1 | |
| - name: "Find newly added board configs in PR" | |
| id: added | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| BASE_SHA="${{ github.event.pull_request.base.sha }}" | |
| HEAD_SHA="${{ github.event.pull_request.head.sha }}" | |
| git diff --name-status "${BASE_SHA}" "${HEAD_SHA}" -- "${BOARDS_PATH}" \ | |
| | awk '$1=="A"{print $2}' \ | |
| | grep -E '\.(conf|csc|wip|tvb)$' \ | |
| > added-files.txt || true | |
| echo "New board config files:" | |
| cat added-files.txt || true | |
| if [[ ! -s added-files.txt ]]; then | |
| echo "No new board configs detected." | |
| echo "none=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "none=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: "Validate board image + vendor logo exist on website repo" | |
| id: validate | |
| if: ${{ steps.added.outputs.none != 'true' }} | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| missing_any=0 | |
| comment_file="$(mktemp)" | |
| { | |
| echo "" | |
| echo "This PR adds new board configuration(s). Required assets must already exist in [github/${WEBSITE_REPO}](https://github.com/${WEBSITE_REPO})." | |
| echo "They are required by [Armbian Imager](https://github.com/armbian/imager) to ensure all boards are displayed with proper images." | |
| echo "" | |
| echo "- Board images: \`${BOARD_IMAGES_DIR}/<board>.png\`" | |
| echo "- Vendor logos: \`${VENDOR_LOGOS_DIR}/<vendor>-logo.png\`" | |
| echo "" | |
| echo "### Missing items" | |
| echo "" | |
| } > "$comment_file" | |
| while IFS= read -r cfg; do | |
| [[ -z "${cfg}" ]] && continue | |
| file="$(basename "$cfg")" | |
| board="${file%.*}" | |
| vendor="$( | |
| grep -E '^[[:space:]]*(export[[:space:]]+)?BOARD_VENDOR[[:space:]]*=' -m1 -- "$cfg" 2>/dev/null \ | |
| | sed -E 's/^[[:space:]]*(export[[:space:]]+)?BOARD_VENDOR[[:space:]]*=[[:space:]]*//; s/^"//; s/"$//' \ | |
| | tr '[:upper:]' '[:lower:]' \ | |
| | tr '_' '-' \ | |
| | awk 'NF{print; exit}' \ | |
| || true | |
| )" | |
| board_img_match="$(find "website/${BOARD_IMAGES_DIR}" -maxdepth 1 -type f -iname "${board}.png" | head -n1 || true)" | |
| if [[ -z "${board_img_match}" ]]; then | |
| { | |
| echo "- ❌ **Board image missing** for \`${board}\`" | |
| echo " - Expected: \`${BOARD_IMAGES_DIR}/${board}.png\`" | |
| echo " - Fix: add the file to **${WEBSITE_REPO}** (folder \`${BOARD_IMAGES_DIR}/\`)" | |
| echo "" | |
| } >> "$comment_file" | |
| missing_any=1 | |
| fi | |
| if [[ -z "${vendor}" ]]; then | |
| { | |
| echo "- ❌ **BOARD_VENDOR not found** in \`${cfg}\`" | |
| echo " - Fix: add e.g. \`BOARD_VENDOR=\"radxa\"\` (lowercase recommended)" | |
| echo "" | |
| } >> "$comment_file" | |
| missing_any=1 | |
| continue | |
| fi | |
| found_logo="$(find "website/${VENDOR_LOGOS_DIR}" -maxdepth 1 -type f \ | |
| \( -iname "${vendor}-logo.png" -o -iname "${vendor}-logo.jpg" -o -iname "${vendor}-logo.jpeg" -o -iname "${vendor}-logo.svg" \) \ | |
| | head -n1 || true)" | |
| if [[ -z "${found_logo}" ]]; then | |
| { | |
| echo "- ❌ **Vendor logo missing** for vendor \`${vendor}\` (used by board \`${board}\`)" | |
| echo " - Expected: \`${VENDOR_LOGOS_DIR}/${vendor}-logo.(png|jpg|jpeg|svg)\`" | |
| echo " - Fix: add the file to **${WEBSITE_REPO}** (folder \`${VENDOR_LOGOS_DIR}/\`)" | |
| echo " - Naming rules: lowercase, dashes (e.g. \`kobol-logo.png\`, not \`Kobol_logo.png\`)" | |
| echo "" | |
| } >> "$comment_file" | |
| missing_any=1 | |
| fi | |
| done < added-files.txt | |
| if [[ "${missing_any}" -ne 0 ]]; then | |
| echo "missing=true" >> "$GITHUB_OUTPUT" | |
| echo 'comment<<EOF' >> "$GITHUB_OUTPUT" | |
| cat "$comment_file" >> "$GITHUB_OUTPUT" | |
| echo 'EOF' >> "$GITHUB_OUTPUT" | |
| echo "::warning ::Missing required assets (see PR comment)." | |
| else | |
| echo "missing=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: "Comment on PR with missing asset instructions" | |
| if: always() && github.event_name == 'pull_request' && steps.validate.outputs.missing == 'true' | |
| uses: actions/github-script@v7 | |
| env: | |
| COMMENT_BODY: ${{ steps.validate.outputs.comment }} | |
| WEBSITE_REPO: ${{ env.WEBSITE_REPO }} | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const body = | |
| `### 🚫 Missing required board assets | |
| ${process.env.COMMENT_BODY} | |
| Once the missing files are added (or a PR is opened in **${process.env.WEBSITE_REPO}**), re-run this check. | |
| `; | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| body | |
| }); |