Add GPG key download for 3rd party distro #2846
Workflow file for this run
This file contains 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: "Unit tests" | |
on: | |
workflow_dispatch: | |
repository_dispatch: | |
types: ["Unit tests"] | |
schedule: | |
- cron: '0 2 * * *' | |
pull_request: | |
types: [opened, reopened, edited, synchronize, review_requested] | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PR_NUMBER: ${{ github.event.number }} | |
REPOSITORY: "apt.armbian.com" | |
concurrency: | |
group: pipeline-pr-${{github.event.pull_request.number}} | |
cancel-in-progress: true | |
jobs: | |
prepare: | |
name: "Armbian configurator unit tests" | |
runs-on: "ubuntu-24.04" | |
outputs: | |
DEPLOYMENT_MATRIX: "${{ steps.json.outputs.DEPLOYMENT_MATRIX }}" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Get changed files | |
id: changed-files | |
uses: tj-actions/changed-files@v45 | |
with: | |
files: | | |
tests/*.conf | |
- name: "Make JSON ${{ steps.changed-files.outputs.all_changed_files }}" | |
id: json | |
run: | | |
delimiter="$(openssl rand -hex 8)" | |
echo "DEPLOYMENT_MATRIX<<${delimiter}" >> "${GITHUB_OUTPUT}" | |
# define OS variants where we can run test install | |
images=("bookworm" "jammy" "noble") | |
# read tests cases | |
if [[ -n "${{ steps.changed-files.outputs.all_changed_files }}" ]]; then | |
tests=($(grep -rwl ${{ steps.changed-files.outputs.all_changed_files }} -e "ENABLED=true" | cut -d":" -f1)) | |
else | |
tests=($(grep -rwl tests/*.conf -e "ENABLED=true" | cut -d":" -f1)) | |
fi | |
# loop enabled test cases | |
for i in "${tests[@]}"; do | |
unset RELEASE | |
source "${i}" | |
if [[ -z "${RELEASE}" ]]; then RELEASE=all; fi | |
# if we speficy releases, we need to loop docker images and use if there is a match | |
if [[ $RELEASE != all || -z $RELEASE ]]; then | |
for j in ${images[@]}; do | |
elements=($(echo $RELEASE | tr ':' "\n")) | |
testid=($(echo $i | cut -d"/" -f2 | cut -d"." -f1)) | |
for SELECTED_RELEASE in "${elements[@]}"; do | |
if [[ $j == *"${SELECTED_RELEASE}"* ]]; then | |
echo "{\"package\":\"${i}\",\"os\":\"$j\",\"id\":\"$testid\"}" | |
fi | |
done | |
done | |
else | |
for j in ${images[@]}; do | |
testid=($(echo $i | cut -d"/" -f2 | cut -d"." -f1)) | |
echo "{\"package\":\"${i}\",\"os\":\"$j\",\"id\":\"$testid\"}" | |
done | |
fi | |
done | jq -s >> $GITHUB_OUTPUT | |
echo "${delimiter}" >> "${GITHUB_OUTPUT}" | |
gradle: | |
needs: prepare | |
if: ${{ needs.prepare.outputs.DEPLOYMENT_MATRIX != '[]' }} | |
strategy: | |
fail-fast: false | |
max-parallel: 32 | |
matrix: | |
server: ${{ fromJSON(needs.prepare.outputs.DEPLOYMENT_MATRIX) }} | |
name: "${{ matrix.server.id }} on Armbian ${{ matrix.server.os }}" | |
runs-on: "${{ matrix.server.os }}" | |
timeout-minutes: 7 | |
steps: | |
- name: "Install dependencies: fastfetch" | |
run: sudo apt-get -y install fastfetch | |
- name: "Checkout Armbian configuration tool" | |
uses: actions/checkout@v4 | |
with: | |
path: 'config' | |
- name: "${{ env.DESCRIPTION }}" | |
run: | | |
fastfetch | |
- name: "Run unit test: ${{ matrix.server.id }} " | |
run: | | |
export TERM=linux | |
rm -rf test | |
mkdir -p test | |
cd config | |
bash tools/config-assemble.sh -p | |
RAWCOMMAND=$(./bin/armbian-config --cmd | grep "${{ matrix.server.id }}" | xargs) | |
COMMAND=$(echo $RAWCOMMAND | cut -d" " -f1,2) | |
DESCRIPTION=$(echo $RAWCOMMAND | cut -d" " -f4-) | |
echo "DESCRIPTION=$DESCRIPTION" >> "${GITHUB_ENV}" | |
source "${{ matrix.server.package }}" | |
# Test case execution | |
start_time=$(date +%s) | |
figlet "RUN TEST CASE" | |
testcase # function inside test script | |
finish_time=$(date +%s) | |
# Generate table entry | |
echo "|${{ matrix.server.os }}|\`armbian-config ${COMMAND}\`| ${DESCRIPTION} | $((finish_time - start_time)) sec |" > ../test/${{ matrix.server.id }}-${{ matrix.server.os }} | |
- name: "${{ env.DESCRIPTION }}" | |
run: | | |
fastfetch | |
- name: "Upload test summary" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-${{ matrix.server.id }}-${{ matrix.server.os }} | |
path: test | |
if-no-files-found: ignore | |
stop: | |
name: "Merge test artifacts" | |
if: always() | |
needs: gradle | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Download All Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: test | |
pattern: test-* | |
merge-multiple: true | |
- name: Install | |
run: | | |
echo "# Succesful tests:" >> $GITHUB_STEP_SUMMARY | |
echo "|Release|Command|Description|Duration|" >> $GITHUB_STEP_SUMMARY | |
echo "|:---|:---|:---|---:|" >> $GITHUB_STEP_SUMMARY | |
cat test/* | sed '$ s/.$//' >> $GITHUB_STEP_SUMMARY | |
- uses: geekyeggo/delete-artifact@v5 | |
with: | |
name: | | |
test-* |