Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
269 changes: 269 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,269 @@
name: IWD CI

#
# The basic flow of the CI is as follows:
#
# 1. Get all inputs, or default values, and set as 'setup' job output
# 2. Find any cached binaries (hostapd, wpa_supplicant, kernel etc)
# 3. Checkout all dependent repositories
# 4. Tar all local files. This is an unfortunate requirement since github jobs
# cannot share local files. Since there are multiple CI's acting on the same
# set of repositories it makes more sense to retain these and re-download
# them for each CI job.
# 5. Run each CI, currently 'main' and 'musl'.
# * 'main' is the default IWD CI which runs all the build steps as well
# as test-runner
# * 'musl' uses an alpine docker image to test the build on musl-libc
#
# Both CI's use the 'iwd-ci' repo which calls into 'ci-docker'. The
# 'ci-docker' action essentially re-implements the native Github docker
# action but allows arbitrary options to be passed in (e.g. privileged or
# mounting non-standard directories)
#

on:
pull_request:
workflow_dispatch:
inputs:
tests:
description: Tests to run (comma separated, no spaces)
default: all
kernel:
description: Kernel version
default: '6.2'
hostapd_version:
description: Hostapd and wpa_supplicant version
default: 'hostap_2_11'
ell_ref:
description: ELL reference
default: refs/heads/workflow

repository_dispatch:
types: [ell-dispatch]

jobs:
setup:
runs-on: ubuntu-22.04
outputs:
tests: ${{ steps.inputs.outputs.tests }}
kernel: ${{ steps.inputs.outputs.kernel }}
hostapd_version: ${{ steps.inputs.outputs.hostapd_version }}
ell_ref: ${{ steps.inputs.outputs.ell_ref }}
repository: ${{ steps.inputs.outputs.repository }}
ref_branch: ${{ steps.inputs.outputs.ref_branch }}
steps:
#
# This makes CI inputs consistent depending on how the CI was invoked:
# * pull_request trigger won't have any inputs, so these need to be set
# to default values.
# * workflow_dispatch sets all inputs from the user input
# * repository_dispatch sets all inputs based on the JSON payload of
# the request.
#
- name: Setup Inputs
id: inputs
run: |
if [ ${{ github.event_name }} == 'workflow_dispatch' ]
then
TESTS=${{ github.event.inputs.tests }}
KERNEL=${{ github.event.inputs.kernel }}
HOSTAPD_VERSION=${{ github.event.inputs.hostapd_version }}
ELL_REF=${{ github.event.inputs.ell_ref }}
REF="$GITHUB_REF"
REPO="$GITHUB_REPOSITORY"
elif [ ${{ github.event_name }} == 'repository_dispatch' ]
then
TESTS=all
KERNEL=5.19
HOSTAPD_VERSION=09a281e52a25b5461c4b08d261f093181266a554
ELL_REF=${{ github.event.client_payload.ref }}
REF=$ELL_REF
REPO=${{ github.event.client_payload.repo }}
else
TESTS=all
KERNEL=5.19
HOSTAPD_VERSION=09a281e52a25b5461c4b08d261f093181266a554
ELL_REF="refs/heads/workflow"
REF="$GITHUB_REF"
REPO="$GITHUB_REPOSITORY"
fi

#
# Now that the inputs are sorted, set the output of this step to these
# values so future jobs can refer to them.
#
echo "tests=$TESTS" >> $GITHUB_OUTPUT
echo "kernel=$KERNEL" >> $GITHUB_OUTPUT
echo "hostapd_version=$HOSTAPD_VERSION" >> $GITHUB_OUTPUT
echo "ell_ref=$ELL_REF" >> $GITHUB_OUTPUT
echo "repository=$REPO" >> $GITHUB_OUTPUT
echo "ref_branch=$REF" >> $GITHUB_OUTPUT

- name: Cache UML Kernel
id: cache-uml-kernel
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/cache/um-linux-${{ steps.inputs.outputs.kernel }}
key: um-linux-${{ steps.inputs.outputs.kernel }}_ubuntu22

- name: Cache Hostapd
id: cache-hostapd
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/hostapd_${{ steps.inputs.outputs.hostapd_version }}
${{ github.workspace }}/cache/hostapd_cli_${{ steps.inputs.outputs.hostapd_version }}
key: hostapd_${{ steps.inputs.outputs.hostapd_version }}_ssl3

- name: Cache WpaSupplicant
id: cache-wpas
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}
${{ github.workspace }}/cache/wpa_cli_${{ steps.inputs.outputs.hostapd_version }}
key: wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}_ssl3

- name: Checkout IWD
uses: actions/checkout@v3
with:
path: iwd
repository: IWDTestBot/iwd
token: ${{ secrets.ACTION_TOKEN }}

- name: Checkout ELL
uses: actions/checkout@v3
with:
path: ell
repository: IWDTestBot/ell
ref: ${{ steps.inputs.outputs.ell_ref }}

- name: Checkout CiBase
uses: actions/checkout@v3
with:
repository: IWDTestBot/cibase
path: cibase

- name: Checkout CI
uses: actions/checkout@v3
with:
repository: IWDTestBot/iwd-ci
path: iwd-ci

- name: Tar files
run: |
FILES="iwd ell cibase iwd-ci"

if [ "${{ steps.cache-uml-kernel.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/um-linux-${{ steps.inputs.outputs.kernel }}"
fi

if [ "${{ steps.cache-hostapd.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/hostapd_${{ steps.inputs.outputs.hostapd_version }}"
FILES+=" ${{ github.workspace }}/cache/hostapd_cli_${{ steps.inputs.outputs.hostapd_version }}"
fi
if [ "${{ steps.cache-wpas.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}"
FILES+=" ${{ github.workspace }}/cache/wpa_cli_${{ steps.inputs.outputs.hostapd_version }}"
fi

tar -cvf archive.tar $FILES

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: iwd-artifacts
path: |
archive.tar

iwd-alpine-ci:
runs-on: ubuntu-22.04
needs: setup
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: iwd-artifacts

- name: Untar
run: tar -xf archive.tar

- name: Modprobe pkcs8_key_parser
run: |
sudo modprobe pkcs8_key_parser

- name: Alpine CI
uses: IWDTestBot/iwd-ci@master
with:
ref_branch: ${{ needs.setup.outputs.ref_branch }}
repository: ${{ needs.setup.outputs.repository }}
github_token: ${{ secrets.ACTION_TOKEN }}
email_token: ${{ secrets.EMAIL_TOKEN }}
patchwork_token: ${{ secrets.PATCHWORK_TOKEN }}
ci: musl

iwd-ci:
runs-on: ubuntu-22.04
needs: setup
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: iwd-artifacts

- name: Untar
run: tar -xf archive.tar

- name: Cache UML Kernel
id: cache-uml-kernel
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/cache/um-linux-${{ needs.setup.outputs.kernel }}
key: um-linux-${{ needs.setup.outputs.kernel }}_ubuntu22

- name: Cache Hostapd
id: cache-hostapd
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/hostapd_${{ needs.setup.outputs.hostapd_version }}
${{ github.workspace }}/cache/hostapd_cli_${{ needs.setup.outputs.hostapd_version }}
key: hostapd_${{ needs.setup.outputs.hostapd_version }}_ssl3

- name: Cache WpaSupplicant
id: cache-wpas
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/wpa_supplicant_${{ needs.setup.outputs.hostapd_version }}
${{ github.workspace }}/cache/wpa_cli_${{ needs.setup.outputs.hostapd_version }}
key: wpa_supplicant_${{ needs.setup.outputs.hostapd_version }}_ssl3

- name: Modprobe pkcs8_key_parser
run: |
sudo modprobe pkcs8_key_parser
echo ${{ needs.setup.outputs.ref_branch }}
echo ${{ needs.setup.outputs.repository }}

- name: Run CI
uses: IWDTestBot/iwd-ci@master
with:
ref_branch: ${{ needs.setup.outputs.ref_branch }}
repository: ${{ needs.setup.outputs.repository }}
tests: ${{ needs.setup.outputs.tests }}
kernel: ${{ needs.setup.outputs.kernel }}
hostapd_version: ${{ needs.setup.outputs.hostapd_version }}
github_token: ${{ secrets.ACTION_TOKEN }}
email_token: ${{ secrets.EMAIL_TOKEN }}
patchwork_token: ${{ secrets.PATCHWORK_TOKEN }}
ci: main

- name: Upload Logs
if: always()
uses: actions/upload-artifact@v4
with:
name: test-runner-logs
path: ${{ github.workspace }}/log
86 changes: 86 additions & 0 deletions .github/workflows/coverity.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Coverity Scan and Submit
description: Runs a coverity scan, then sends results to the cloud
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:

jobs:
scan-and-submit:
runs-on: ubuntu-22.04
steps:
- name: Lookup latest tool
id: cache-lookup
run: |
hash=$(curl https://scan.coverity.com/download/cxx/linux64 \
--data "token=${{ secrets.COVERITY_IWD_TOKEN }}&project=IWD&md5=1");
echo "hash=${hash}" >> $GITHUB_OUTPUT

- name: Get cached coverity tool
id: build-cache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/cov-analysis
key: cov-build-cxx-linux64-${{ steps.cache-lookup.outputs.hash }}

- name: Download Coverity Build Tool
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
curl https://scan.coverity.com/download/cxx/linux64 \
--no-progress-meter \
--output cov-analysis.tar.gz \
--data "token=${{ secrets.COVERITY_IWD_TOKEN }}&project=IWD"
shell: bash
working-directory: ${{ github.workspace }}

- if: steps.build-cache.outputs.cache-hit != 'true'
run: mkdir cov-analysis
shell: bash
working-directory: ${{ github.workspace }}

- if: steps.build-cache.outputs.cache-hit != 'true'
run: tar -xzf cov-analysis.tar.gz --strip 1 -C cov-analysis
shell: bash
working-directory: ${{ github.workspace }}

- name: Checkout IWD
uses: actions/checkout@v3
with:
path: ${{ github.workspace }}/iwd
repository: IWDTestBot/iwd
token: ${{ secrets.ACTION_TOKEN }}

- name: Checkout ELL
uses: actions/checkout@v3
with:
path: ${{ github.workspace }}/ell
repository: IWDTestBot/ell
token: ${{ secrets.ACTION_TOKEN }}

- name: Configure IWD
run: |
cd ${{ github.workspace }}/iwd
./bootstrap-configure --disable-manual-pages

- name: Build with cov-build
run: |
export PATH="${{ github.workspace }}/cov-analysis/bin:${PATH}"
cov-build --dir cov-int make -j4
shell: bash
working-directory: ${{ github.workspace }}/iwd

- name: Tar results
run: tar -czvf cov-int.tgz cov-int
shell: bash
working-directory: ${{ github.workspace }}/iwd

- name: Submit results to Coverity Scan
if: ${{ ! inputs.dry_run }}
run: |
curl \
--form token="${{ secrets.COVERITY_IWD_TOKEN }}" \
--form email="iwd.ci.bot@gmail.com" \
--form file=@cov-int.tgz \
"https://scan.coverity.com/builds?project=IWD"
shell: bash
working-directory: ${{ github.workspace }}/iwd
16 changes: 16 additions & 0 deletions .github/workflows/pw-to-pr-email.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
This is an automated email and please do not reply to this email.

Dear Submitter,

Thank you for submitting the patches to the IWD mailing list.
While preparing the CI tests, the patches you submitted couldn't be applied to the current HEAD of the repository.

----- Output -----
{}

Please resolve the issue and submit the patches again.


---
Regards,
IWDTestBot
14 changes: 14 additions & 0 deletions .github/workflows/pw-to-pr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"email": {
"enable": true,
"server": "smtp.gmail.com",
"port": 587,
"user": "iwd.ci.bot@gmail.com",
"starttls": true,
"default-to": "prestwoj@gmail.com",
"only-maintainers": false,
"maintainers": [
"prestwoj@gmail.com"
]
}
}
Loading