Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
94c8da4
Workflow's for syncing with upstream, build, unit test, and test-runner
jprestwo Mar 16, 2022
008b0fc
workflow: use newer commit for hostapd
jprestwo Jun 24, 2022
0f39088
ci: remove cache/ from tar file list
jprestwo Sep 7, 2022
ea7ebfd
ci: use kernel 5.19
jprestwo Sep 14, 2022
d784c05
ci: use iwd-ci after renaming to remove -v2
jprestwo Oct 14, 2022
114121e
ci: remove set-output use, now deprecated
jprestwo Oct 14, 2022
344d543
Update kernel to 6.2 and hostapd/wpa_s to 2.11
jprestwo Nov 7, 2024
409879f
Update upload/download-artifact to v4
jprestwo Feb 13, 2025
46c60c3
Add coverity Github action
jprestwo Apr 18, 2025
0e452d2
Fix hostap branch name
jprestwo Aug 18, 2025
8b0515a
vendor_quirks: initial skeleton
jprestwo Aug 27, 2025
e3cbf18
vendor_quirks: implement two vendor quirks
jprestwo Aug 27, 2025
b342de8
handshake: pass object to handshake_util_ap_ie_matches
jprestwo Aug 27, 2025
9a8db47
handshake: add vendor quirks into handshake object
jprestwo Aug 27, 2025
34af1d8
scan: store vendor quirks in scan_bss
jprestwo Aug 27, 2025
0362adb
station: set vendor quirks into handshake object
jprestwo Aug 27, 2025
86cc4dc
handshake: use vendor quirk to disable check of replay counters
jprestwo Aug 27, 2025
2037390
station: get neighbor report on BSS TM request
jprestwo Aug 27, 2025
237a7ea
station: check vendor quirk for BSS TM request candidate list
jprestwo Aug 27, 2025
5f660b0
auto-t: add AP roam test for bad neighbor reports/candidate lists
jprestwo Aug 27, 2025
cab4f2a
station: print vendor quirks (if any) when connecting/roaming
jprestwo Aug 27, 2025
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
Loading