| name: Reusable Ubuntu | |
| on: | |
| workflow_call: | |
| inputs: | |
| config_hash: | |
| required: true | |
| type: string | |
| free-threading: | |
| description: Whether to use free-threaded mode | |
| required: false | |
| type: boolean | |
| default: false | |
| jobs: | |
| build_ubuntu_reusable: | |
| name: 'build and test' | |
| timeout-minutes: 60 | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-24.04, ubuntu-24.04-aarch64] | |
| env: | |
| FORCE_COLOR: 1 | |
| OPENSSL_VER: 3.0.15 | |
| PYTHONSTRICTEXTENSIONBUILD: 1 | |
| TERM: linux | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Register gcc problem matcher | |
| run: echo "::add-matcher::.github/problem-matchers/gcc.json" | |
| - name: Install dependencies | |
| run: sudo ./.github/workflows/posix-deps-apt.sh | |
| - name: Configure OpenSSL env vars | |
| run: | | |
| echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV | |
| echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV | |
| echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV | |
| - name: 'Restore OpenSSL build' | |
| id: cache-openssl | |
| uses: actions/cache@v4 | |
| with: | |
| path: ./multissl/openssl/${{ env.OPENSSL_VER }} | |
| key: ${{ matrix.os }}-multissl-openssl-${{ env.OPENSSL_VER }} | |
| - name: Install OpenSSL | |
| if: steps.cache-openssl.outputs.cache-hit != 'true' | |
| run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux | |
| - name: Add ccache to PATH | |
| run: | | |
| echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV | |
| - name: Configure ccache action | |
| uses: hendrikmuhs/ccache-action@v1.2 | |
| with: | |
| save: ${{ github.event_name == 'push' }} | |
| max-size: "200M" | |
| - name: Setup directory envs for out-of-tree builds | |
| run: | | |
| echo "CPYTHON_RO_SRCDIR=$(realpath -m ${GITHUB_WORKSPACE}/../cpython-ro-srcdir)" >> $GITHUB_ENV | |
| echo "CPYTHON_BUILDDIR=$(realpath -m ${GITHUB_WORKSPACE}/../cpython-builddir)" >> $GITHUB_ENV | |
| - name: Create directories for read-only out-of-tree builds | |
| run: mkdir -p $CPYTHON_RO_SRCDIR $CPYTHON_BUILDDIR | |
| - name: Bind mount sources read-only | |
| run: sudo mount --bind -o ro $GITHUB_WORKSPACE $CPYTHON_RO_SRCDIR | |
| - name: Runner image version | |
| run: echo "IMAGE_VERSION=${ImageVersion}" >> $GITHUB_ENV | |
| - name: Restore config.cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.CPYTHON_BUILDDIR }}/config.cache | |
| key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-${{ inputs.config_hash }} | |
| - name: Configure CPython out-of-tree | |
| working-directory: ${{ env.CPYTHON_BUILDDIR }} | |
| run: >- | |
| ../cpython-ro-srcdir/configure | |
| --config-cache | |
| --with-pydebug | |
| --with-openssl=$OPENSSL_DIR | |
| ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} | |
| - name: Build CPython out-of-tree | |
| working-directory: ${{ env.CPYTHON_BUILDDIR }} | |
| run: make -j | |
| - name: Display build info | |
| working-directory: ${{ env.CPYTHON_BUILDDIR }} | |
| run: make pythoninfo | |
| - name: Remount sources writable for tests | |
| # some tests write to srcdir, lack of pyc files slows down testing | |
| run: sudo mount $CPYTHON_RO_SRCDIR -oremount,rw | |
| - name: Tests | |
| working-directory: ${{ env.CPYTHON_BUILDDIR }} | |
| run: xvfb-run make test |