aboutsummaryrefslogtreecommitdiffstats
# 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.23
  ATHEME_REF: 47fe56b86cbb845a658339c3f2f0fa1b80563c5a # 2026-02-28
  IRCTEST_REF: c85b574765d67a0270d9c7b35f37ab57e7f95774 # 2026-04-08

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@v6

      - name: Run CMake
        env:
          CXXFLAGS: -DINSPIRCD_UNLIMITED_MAINLOOP
        run: |-
          cmake -B "build" \
                -D "CMAKE_BUILD_TYPE=Release" \
                -D "CMAKE_INSTALL_PREFIX=$HOME/inspircd" \
                -D "CMAKE_UNITY_BUILD=ON" \
                -D "CMAKE_UNITY_BUILD_BATCH_SIZE=0" \
                -D "AUTO_ENABLE_EXTRAS=OFF" \
                -G "Ninja" \
                -Wdeprecated \
                -Wdev

      - name: Build and install
        env:
          VERBOSE: ${{ runner.debug }}
        run: |-
          ninja -C "build" ${{ runner.debug == '1' && '-v' || '' }} 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@v6
        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@v6
        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@v6
        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