# This workflow has four tasks: # # 1. the first builds inspircd (with some optimizations for irctest), and uploads it # to a temporary storage # 2. the other three download the binary we just built, and run it through inspircd, # with either Anope, Atheme, or runs service-independent tests name: irctest env: ANOPE_REF: 2.1.24 ATHEME_REF: 23071cdf2c7b20210799218b485f97f06311b41f # 2026-05-12 IRCTEST_REF: 04c531a6d5c6a962e783749c4cccdf03b66c3894 # 2026-06-06 on: pull_request: push: schedule: - cron: 0 0 * * 0 jobs: build: if: "!contains(github.event.head_commit.message, '[skip irctest ci]')" runs-on: ubuntu-24.04-arm steps: - name: Checkout InspIRCd uses: actions/checkout@v7 - name: Run configure run: |- ./configure --development --disable-auto-extras --prefix "$HOME/inspircd" # Speed-up build (6 min -> 5 min) - name: Precompile inspircd.h run: |- c++ -Ivendor include/inspircd.h - name: Build and install env: CXXFLAGS: -DINSPIRCD_UNLIMITED_MAINLOOP run: |- make --jobs $(($(getconf _NPROCESSORS_ONLN) + 1)) install - name: Make artifact tarball run: |- tar --create --gzip --verbose --directory "$HOME" --file "${{ runner.temp }}/inspircd.tar.gz" inspircd - name: Upload build artifact uses: actions/upload-artifact@v7 with: name: installed-inspircd-for-irctest path: ${{ runner.temp }}/inspircd.tar.gz retention-days: 1 test: if: "!contains(github.event.head_commit.message, '[skip irctest ci]')" runs-on: ubuntu-24.04-arm env: IRCTEST_DEBUG_LOGS: "1" needs: - build steps: - name: Download build artifact uses: actions/download-artifact@v8 with: name: installed-inspircd-for-irctest path: ${{ runner.temp }} - name: Unpack artifact run: |- tar --extract --gzip --verbose --directory "$HOME" --file "${{ runner.temp }}/inspircd.tar.gz" echo "PATH=$HOME/inspircd/bin:$PATH" >> $GITHUB_ENV - name: Checkout irctest uses: actions/checkout@v7 with: path: irctest ref: ${{ env.IRCTEST_REF }} repository: progval/irctest - name: Install irctest dependencies run: |- sudo apt-get install --assume-yes faketime python3-pytest - name: Run irctest (no services) if: matrix.services == 'no services' working-directory: irctest run: make inspircd - name: Checkout Anope if: matrix.services == 'anope' uses: actions/checkout@v7 with: path: anope ref: ${{ env.ANOPE_REF }} repository: anope/anope - name: Build and install Anope if: matrix.services == 'anope' working-directory: anope run: |- sudo apt-get install ninja-build --no-install-recommends cmake -B build -D CMAKE_INSTALL_PREFIX="$HOME/anope" -G Ninja ninja -C build install echo "PATH=$HOME/anope/bin:$PATH" >> $GITHUB_ENV - name: Run irctest (Anope services) if: matrix.services == 'anope' working-directory: irctest run: make inspircd-anope - name: Checkout Atheme if: matrix.services == 'atheme' uses: actions/checkout@v7 with: path: atheme ref: ${{ env.ATHEME_REF }} repository: atheme/atheme submodules: recursive - name: Build and install Atheme if: matrix.services == 'atheme' working-directory: atheme run: |- sudo apt-get install gettext --assume-yes ./configure --prefix "$HOME/atheme" make make install echo "PATH=$HOME/atheme/bin:$PATH" >> $GITHUB_ENV - name: Run irctest (Atheme services) if: matrix.services == 'atheme' working-directory: irctest run: make inspircd-atheme strategy: fail-fast: false matrix: services: - no services - anope - atheme