diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ff424a04..25e0eaae 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -7,73 +7,122 @@ on: pull_request: jobs: - build: - name: 'PHP ${{ matrix.php.branch }}' + determine-php-matrix: + name: Figure out the packages we need to build runs-on: ubuntu-latest + + outputs: + php: ${{ steps.set-php-matrix.outputs.php }} + + steps: + - name: Set up Git repository + uses: actions/checkout@v3 + + - name: Install Nix + uses: cachix/install-nix-action@v18 + + - id: set-php-matrix + run: | + echo "::set-output name=php::$( + nix eval --json --impure \ + --expr 'builtins.attrNames (import ./.).packages.x86_64-linux' + )" + + build: + name: "Build #${{ matrix.php }} on ${{ matrix.operating-system }}" + needs: [determine-php-matrix] + runs-on: ${{ matrix.operating-system }} strategy: - matrix: - php: - - branch: '8.2' - - branch: '8.1' - - branch: '8.0' - - branch: '7.4' - - branch: '7.3' - - branch: '7.2' - - branch: '7.1' - - branch: '7.0' - - branch: '5.6' # We want to fix failures individually. fail-fast: false + matrix: + php: ${{fromJson(needs.determine-php-matrix.outputs.php)}} + operating-system: [ubuntu-latest, macOS-latest] + steps: - - uses: actions/checkout@v3 + - name: Set up Git repository + uses: actions/checkout@v2 + with: + fetch-depth: 1 - name: Install Nix - uses: cachix/install-nix-action@v18 + uses: cachix/install-nix-action@v16 - name: Set up Nix cache - uses: cachix/cachix-action@v12 + uses: cachix/cachix-action@v10 with: name: fossar - authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - - - name: Set job parameters - id: params - run: | - branch=${{ matrix.php.branch }} - major=${branch%%.*} - minor=${branch#*.} - attr=php$major$minor - echo "major=$major" >> $GITHUB_OUTPUT - echo "attr=$attr" >> $GITHUB_OUTPUT + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - name: Build PHP - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-php + run: nix build .#${{ matrix.php }} - name: Build Imagick extension - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-imagick + run: nix build .#${{ matrix.php }}.extensions.imagick - name: Build Redis extension - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-redis + run: nix build .#${{ matrix.php }}.extensions.redis - name: Build Redis 3 extension - if: ${{ steps.params.outputs.major < 8 }} - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-redis3 + continue-on-error: true + run: nix build .#${{ matrix.php }}.extensions.redis3 - name: Build MySQL extension - if: ${{ steps.params.outputs.major < 7 }} - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-mysql + continue-on-error: true + run: nix build .#${{ matrix.php }}.extensions.mysql - name: Build Xdebug extension - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-xdebug + run: nix build .#${{ matrix.php }}.extensions.xdebug - name: Build Tidy extension - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-tidy + run: nix build .#${{ matrix.php }}.extensions.tidy - name: Check that composer PHAR works - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-composer-phar + run: | + nix develop --impure --expr ' + let + self = import ./.; + composer = + self.outputs.packages.${builtins.currentSystem}.${{ matrix.php }}.packages.composer; + pkgs = import self.inputs.nixpkgs { }; + in + pkgs.mkShell { + packages = [ + composer + ]; + } + ' -c composer --version - name: Validate php.extensions.mysqli default unix socket path - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-mysqli-socket-path + run: | + nix develop --impure --expr ' + let + self = import ./.; + php = + self.outputs.packages.${builtins.currentSystem}.${{ matrix.php }}.withExtensions + ({ all, ... }: [ all.mysqli ]); + pkgs = import self.inputs.nixpkgs { }; + in + pkgs.mkShell { + packages = [ + php + ]; + } + ' -c php -r "echo ini_get('mysqli.default_socket') . PHP_EOL;" | grep /run/mysqld/mysqld.sock - name: Validate php.extensions.pdo_mysql default unix socket path - run: nix-build -A outputs.checks.x86_64-linux.${{ steps.params.outputs.attr }}-pdo_mysql-socket-path + run: | + nix develop --impure --expr ' + let + self = import ./.; + php = + self.outputs.packages.${builtins.currentSystem}.${{ matrix.php }}.withExtensions + ({ all, ... }: [ all.pdo_mysql ]); + pkgs = import self.inputs.nixpkgs { }; + in + pkgs.mkShell { + packages = [ + php + ]; + } + ' -c php -r "echo ini_get('pdo_mysql.default_socket') . PHP_EOL;" | grep /run/mysqld/mysqld.sock