From 31f0ec3db834bdce5ec122899e1bae69acfab779 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Sun, 27 Feb 2022 21:54:17 +0100 Subject: [PATCH] Auto-determine derivations to build. Test on Linux and MacOS. --- .github/workflows/build.yaml | 95 ++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 41 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 1bf12121..b2b354ee 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -8,72 +8,85 @@ on: push: jobs: + determine-matrix: + name: Figure out the packages we need to build + runs-on: ubuntu-latest + + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + + steps: + - name: Set up Git repository + uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - name: Install Nix + uses: cachix/install-nix-action@v16 + + - id: set-matrix + run: | + echo "::set-output name=matrix::$( + nix eval --json --impure \ + --expr 'builtins.attrNames (import ./.).packages.x86_64-linux' + )" + build: - name: 'PHP ${{ matrix.php.major }}.${{ matrix.php.minor }}' - runs-on: ubuntu-20.04 + name: "Build #${{ matrix.packages }} on ${{ matrix.operating-system }}" + needs: [determine-matrix] + runs-on: ${{ matrix.operating-system }} strategy: - matrix: - php: - - major: 8 - minor: 1 - - major: 8 - minor: 0 - - major: 7 - minor: 4 - - major: 7 - minor: 3 - - major: 7 - minor: 2 - - major: 7 - minor: 1 - - major: 7 - minor: 0 - - major: 5 - minor: 6 # We want to fix failures individually. fail-fast: false + matrix: + packages: ${{fromJson(needs.determine-matrix.outputs.matrix)}} + operating-system: [ubuntu-latest, macOS-latest] + steps: - - uses: actions/checkout@v2 + - name: Set up Git repository + uses: actions/checkout@v2 + with: + fetch-depth: 1 - name: Install Nix - uses: cachix/install-nix-action@v14 + uses: cachix/install-nix-action@v16 - name: Set up Nix cache uses: cachix/cachix-action@v10 with: name: fossar - authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - name: Build PHP - run: nix-build -A outputs.packages.x86_64-linux.php${{ matrix.php.major }}${{ matrix.php.minor }} + run: nix build .#${{ matrix.packages }} - name: Build Imagick extension - run: nix-build -A outputs.packages.x86_64-linux.php${{ matrix.php.major }}${{ matrix.php.minor }}.extensions.imagick + run: nix build .#${{ matrix.packages }}.extensions.imagick - name: Build Redis extension - run: nix-build -A outputs.packages.x86_64-linux.php${{ matrix.php.major }}${{ matrix.php.minor }}.extensions.redis + run: nix build .#${{ matrix.packages }}.extensions.redis - name: Build Redis 3 extension - if: ${{ matrix.php.major < 8 }} - run: nix-build -A outputs.packages.x86_64-linux.php${{ matrix.php.major }}${{ matrix.php.minor }}.extensions.redis3 + continue-on-error: true + run: nix build .#${{ matrix.packages }}.extensions.redis3 - name: Build MySQL extension - if: ${{ matrix.php.major < 7 }} - run: nix-build -A outputs.packages.x86_64-linux.php${{ matrix.php.major }}${{ matrix.php.minor }}.extensions.mysql + continue-on-error: true + run: nix build .#${{ matrix.packages }}.extensions.mysql - name: Build Xdebug extension - run: nix-build -A outputs.packages.x86_64-linux.php${{ matrix.php.major }}${{ matrix.php.minor }}.extensions.xdebug + run: nix build .#${{ matrix.packages }}.extensions.xdebug - name: Build Tidy extension - run: nix-build -A outputs.packages.x86_64-linux.php${{ matrix.php.major }}${{ matrix.php.minor }}.extensions.tidy + run: nix build .#${{ matrix.packages }}.extensions.tidy - name: Check that composer PHAR works run: | - nix-shell -E ' + nix develop --impure --expr ' let self = import ./.; composer = - self.outputs.packages.${builtins.currentSystem}.php${{ matrix.php.major }}${{ matrix.php.minor }}.packages.composer; + self.outputs.packages.${builtins.currentSystem}.php73.packages.composer; pkgs = import self.inputs.nixpkgs { }; in pkgs.mkShell { @@ -81,15 +94,15 @@ jobs: composer ]; } - ' --run "composer --version" + ' -c composer --version - name: Validate php.extensions.mysqli default unix socket path run: | - nix-shell -E ' + nix develop --impure --expr ' let self = import ./.; php = - self.outputs.packages.${builtins.currentSystem}.php${{ matrix.php.major }}${{ matrix.php.minor }}.withExtensions + self.outputs.packages.${builtins.currentSystem}.${{ matrix.packages }}.withExtensions ({ all, ... }: [ all.mysqli ]); pkgs = import self.inputs.nixpkgs { }; in @@ -98,15 +111,15 @@ jobs: php ]; } - ' --run "php -r \"echo ini_get('mysqli.default_socket') . PHP_EOL;\" | grep /run/mysqld/mysqld.sock" + ' -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-shell -E ' + nix develop --impure --expr ' let self = import ./.; php = - self.outputs.packages.${builtins.currentSystem}.php${{ matrix.php.major }}${{ matrix.php.minor }}.withExtensions + self.outputs.packages.${builtins.currentSystem}.${{ matrix.packages }}.withExtensions ({ all, ... }: [ all.pdo_mysql ]); pkgs = import self.inputs.nixpkgs { }; in @@ -115,4 +128,4 @@ jobs: php ]; } - ' --run "php -r \"echo ini_get('pdo_mysql.default_socket') . PHP_EOL;\" | grep /run/mysqld/mysqld.sock" + ' -c php -r "echo ini_get('pdo_mysql.default_socket') . PHP_EOL;" | grep /run/mysqld/mysqld.sock