Skip to content

Commit

Permalink
Add unit test Github action script for automated function testings
Browse files Browse the repository at this point in the history
  • Loading branch information
igorpecovnik authored and Tearran committed Sep 24, 2024
1 parent e6c0c2e commit 43bea4a
Show file tree
Hide file tree
Showing 6 changed files with 184 additions and 3 deletions.
12 changes: 12 additions & 0 deletions .github/workflows/debian.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,15 @@ jobs:
secrets:
GPG_PRIVATE_KEY: ${{ secrets.GPG_KEY1 }}
PASSPHRASE: ${{ secrets.GPG_PASSPHRASE1 }}

Tests:
name: "Execute unit tests"
if: ${{ github.repository_owner == 'Armbian' }}
needs: Debian
runs-on: ubuntu-latest
steps:

- name: "Run unit tests action"
uses: peter-evans/repository-dispatch@v3
with:
event-type: "Unit tests"
157 changes: 157 additions & 0 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
name: "Unit tests"
on:
repository_dispatch:
types: ["Unit tests"]
schedule:
- cron: '0 2 * * *'
pull_request:
types: [opened, reopened, edited, synchronize, review_requested]
# paths:
# - 'tests/*.conf'

env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.number }}

concurrency:
group: pipeline-pr-${{github.event.pull_request.number}}
cancel-in-progress: true

jobs:

test:
name: "Unit tests"
runs-on: ubuntu-latest
outputs:
matrix: ${{steps.json.outputs.JSON_CONTENT}}
steps:

- name: Checkout
uses: actions/checkout@v4
with:
path: 'config'

- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v43
with:
path: config
files: |
tests/*.conf
- name: "Make JSON ${{ steps.changed-files.outputs.all_changed_files }}"
id: json
run: |
echo 'JSON_CONTENT<<EOF' >> $GITHUB_OUTPUT
# define docker images where we will run test install
dockerimages=("debian:bookworm" "debian:trixie" "ubuntu:jammy" "ubuntu:noble")
# read tests cases and loop them
if [[ -n "${{ steps.changed-files.outputs.all_changed_files }}" ]]; then
tests=($(echo ${{ steps.changed-files.outputs.all_changed_files }} | tr " " "\n" | cut -d"." -f1 | cut -d"/" -f2))
else
tests=($(grep -rw config/tests/*.conf -e "ENABLED=true" | cut -d"/" -f3 | cut -d"." -f1))
fi
for i in "${tests[@]}"; do
unset RELEASE
source config/tests/${i}.conf
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 ${dockerimages[@]}; do
elements=($(echo $RELEASE | tr ':' "\n"))
for SELECTED_RELEASE in "${elements[@]}"; do
if [[ $j == *"${SELECTED_RELEASE}"* ]]; then
echo "{\"package\":\"${i}\",\"image\":\"$j\"}"
fi
done
done
else
for j in ${dockerimages[@]}; do
echo "{\"package\":\"${i}\",\"image\":\"$j\"}"
done
fi
done | jq -s >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
gradle:
needs: test
strategy:
fail-fast: false
max-parallel: 32
matrix:
image: ${{ fromJSON(needs.test.outputs.matrix) }}

name: "I"
runs-on: ubuntu-latest
container:
image: "${{ matrix.image.image }}"
steps:

- name: Checkout
uses: actions/checkout@v4
with:
path: 'config'

- name: Install
run: |
# source vars
. "config/tests/${{ matrix.image.package }}.conf"
echo ${TEST_TITLE}
export DEBIAN_FRONTEND=noninteractive
RELEASE=$(echo "${{ matrix.image.image }}" | cut -d":" -f2)
apt update
apt -y install wget gpg
# add armbian repository
URL=apt.armbian.com
wget https://${URL}/armbian.key -O key
gpg --dearmor < key | tee /usr/share/keyrings/armbian.gpg > /dev/null
chmod go+r /usr/share/keyrings/armbian.gpg
echo "deb [signed-by=/usr/share/keyrings/armbian.gpg] http://${URL} $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" | tee /etc/apt/sources.list.d/armbian.list
apt update -y
apt upgrade -y
apt -y install sudo procps systemd whiptail jq lsb-release iproute2
# install packages / except howdy as its too large
export DEBIAN_FRONTEND=noninteractive
cd config
eval "$PREINSTALL"
sudo bash bin/armbian-configng --cmd "${{ matrix.image.package }}"
eval "$CONDITION"
# stats
FILENAME="data-"$(echo ${{ matrix.image.image }} | sed "s/:/-/g")"-${{ matrix.image.package }}.teststats"
echo $RELEASE >> ../${FILENAME}
bash bin/armbian-configng --cmd | grep "${{ matrix.image.package }}" | xargs >> ../${FILENAME}
echo " " >> ../${FILENAME}
- name: Upload test
uses: actions/[email protected]
with:
name: TESTDATA
path: data-*.teststats

stop:
name: "Merge test artifacts"
if: always()
needs: gradle
runs-on: ubuntu-latest
steps:

- name: "Download changes"
uses: actions/download-artifact@v3-node20
with:
name: TESTDATA

- name: Install
run: |
echo "# Succesful tests:" >> $GITHUB_STEP_SUMMARY
cat ./*.teststats | sed '$ s/.$//' >> $GITHUB_STEP_SUMMARY
6 changes: 3 additions & 3 deletions lib/armbian-configng/config.ng.jobs.json
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@
"export BASHLOCATION=$(grep /bash$ /etc/shells | tail -1)",
"sed -i \"s|^SHELL=.*|SHELL=${BASHLOCATION}|\" /etc/default/useradd",
"sed -i \"s|^DSHELL=.*|DSHELL=${BASHLOCATION}|\" /etc/adduser.conf",
"debconf-apt-progress -- apt-get -y purge armbian-zsh",
"apt_install_wrapper apt-get -y purge armbian-zsh zsh-common zsh tmux",
"update_skel",
"awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534 || $3 == 0) print $1}' /etc/passwd | xargs -L1 chsh -s $(grep /bash$ /etc/shells | tail -1)"
],
Expand All @@ -267,7 +267,7 @@
"export ZSHLOCATION=$(grep /zsh$ /etc/shells | tail -1)",
"sed -i \"s|^SHELL=.*|SHELL=${ZSHLOCATION}|\" /etc/default/useradd",
"sed -i \"s|^DSHELL=.*|DSHELL=${ZSHLOCATION}|\" /etc/adduser.conf",
"debconf-apt-progress -- apt-get -y install armbian-zsh",
"apt_install_wrapper apt-get -y install armbian-zsh zsh-common zsh tmux",
"update_skel",
"awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534 || $3 == 0) print $1}' /etc/passwd | xargs -L1 chsh -s $(grep /zsh$ /etc/shells | tail -1)"
],
Expand Down Expand Up @@ -724,7 +724,7 @@
"src_reference": "",
"author": "",
"condition": "[ -f /usr/bin/armbianmonitor ]"

}
]
},
Expand Down
7 changes: 7 additions & 0 deletions tests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Unit tests

- name of the the file is function ID.
- ENABLED=false|true
- PREINSTALL="cmd" in order to satisfy test case
- CONDITION must return 0 for test success

3 changes: 3 additions & 0 deletions tests/S17.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ENABLED=true
PREINSTALL="bash bin/armbian-configng --cmd S18"
CONDITION="[ ! -f /usr/bin/zsh ]"
2 changes: 2 additions & 0 deletions tests/S18.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ENABLED=true
CONDITION="[ -f /usr/bin/zsh ]"

0 comments on commit 43bea4a

Please sign in to comment.