diff --git a/.github/nightly_matrix.php b/.github/matrix.php similarity index 91% rename from .github/nightly_matrix.php rename to .github/matrix.php index 51dd2e690744..161c2241a963 100644 --- a/.github/nightly_matrix.php +++ b/.github/matrix.php @@ -1,11 +1,11 @@ 'master', 'version' => [8, 6]], - ['ref' => 'PHP-8.5', 'version' => [8, 5]], - ['ref' => 'PHP-8.4', 'version' => [8, 4]], - ['ref' => 'PHP-8.3', 'version' => [8, 3]], - ['ref' => 'PHP-8.2', 'version' => [8, 2]], + ['name' => 'master', 'ref' => 'refs/heads/master', 'version' => [8, 6]], + ['name' => 'PHP-8.5', 'ref' => 'refs/heads/PHP-8.5', 'version' => [8, 5]], + ['name' => 'PHP-8.4', 'ref' => 'refs/heads/PHP-8.4', 'version' => [8, 4]], + ['name' => 'PHP-8.3', 'ref' => 'refs/heads/PHP-8.3', 'version' => [8, 3]], + ['name' => 'PHP-8.2', 'ref' => 'refs/heads/PHP-8.2', 'version' => [8, 2]], ]; function get_branch_commit_cache_file_path(): string { @@ -81,7 +81,7 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re : ['type' => ['asan']]; $jobs['COMMUNITY']['config']['symfony_version'] = version_compare($php_version, '8.4', '>=') ? '8.1' : '7.4'; } - if (($all_jobs && $ref === 'master') || $test_coverage) { + if (($all_jobs && $ref === 'refs/heads/master') || $test_coverage) { $jobs['COVERAGE'] = true; } if ($all_jobs || $test_libmysqlclient) { @@ -129,7 +129,7 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re if ($all_jobs || $test_opcache_variation) { $jobs['OPCACHE_VARIATION'] = true; } - if (($all_jobs && $ref === 'master') || $test_pecl) { + if (($all_jobs && $ref === 'refs/heads/master') || $test_pecl) { $jobs['PECL'] = true; } if ($all_jobs || !$no_jobs || $test_windows) { @@ -160,14 +160,14 @@ function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $re if ($discard_cache) { @unlink(get_branch_commit_cache_file_path()); } -$branch = $argv[3] ?? 'master'; -$branches = $branch === 'master' +$branch = $argv[3] ?? 'refs/heads/master'; +$nightly = $trigger === 'schedule' || $trigger === 'workflow_dispatch'; +$branches = $nightly && $branch === 'refs/heads/master' ? get_branches() - : [['ref' => $branch, 'version' => get_current_version()]]; + : [['name' => 'Suite', 'ref' => $branch, 'version' => get_current_version()]]; $labels = json_decode($argv[4] ?? '[]', true) ?? []; $labels = array_column($labels, 'name'); -$nightly = $trigger === 'schedule' || $trigger === 'workflow_dispatch'; $all_variations = $nightly || in_array('CI: All variations', $labels, true); $repository = $argv[5] ?? null; diff --git a/.github/workflows/nightly-results.yml b/.github/workflows/nightly-results.yml index a222582da1c6..fea01e1b0264 100644 --- a/.github/workflows/nightly-results.yml +++ b/.github/workflows/nightly-results.yml @@ -2,13 +2,13 @@ name: Nightly results on: workflow_run: workflows: - - Nightly + - Test types: - completed jobs: on-failure: runs-on: ubuntu-latest - if: ${{ github.repository == 'php/php-src' && github.event.workflow_run.conclusion == 'failure' }} + if: ${{ github.repository == 'php/php-src' && github.event.workflow_run.event == 'schedule' && github.event.workflow_run.conclusion == 'failure' }} steps: - run: | export DEBIAN_FRONTEND=noninteractive diff --git a/.github/workflows/root.yml b/.github/workflows/root.yml deleted file mode 100644 index 5b3ebfd11d5a..000000000000 --- a/.github/workflows/root.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Nightly -on: - schedule: - - cron: "0 1 * * *" - workflow_dispatch: ~ -permissions: - contents: read -jobs: - GENERATE_MATRIX: - name: Generate Matrix - if: github.repository == 'php/php-src' || github.event_name == 'workflow_dispatch' - runs-on: ubuntu-latest - outputs: - all_variations: ${{ steps.set-matrix.outputs.all_variations }} - branches: ${{ steps.set-matrix.outputs.branches }} - steps: - - uses: actions/checkout@v6 - with: - # Set fetch-depth to 0 to clone the full repository - # including all branches. This is required to find - # the correct commit hashes. - fetch-depth: 0 - - name: Grab the commit mapping - uses: actions/cache@v5 - with: - path: branch-commit-cache.json - # The cache key needs to change every time for the - # cache to be updated after this job finishes. - key: nightly-${{ github.run_id }}-${{ github.run_attempt }} - restore-keys: | - nightly- - - name: Generate Matrix - id: set-matrix - run: php .github/nightly_matrix.php "${{ github.event_name }}" "${{ github.run_attempt }}" "${{ github.head_ref || github.ref_name }}" '[]' "${{ github.repository }}" - NIGHTLY: - needs: GENERATE_MATRIX - name: ${{ matrix.branch.ref }} - if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }} - uses: ./.github/workflows/nightly.yml - strategy: - fail-fast: false - matrix: - branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }} - with: - all_variations: ${{ needs.GENERATE_MATRIX.outputs.all_variations == 'true' }} - branch: ${{ toJSON(matrix.branch) }} - secrets: inherit diff --git a/.github/workflows/nightly.yml b/.github/workflows/test-suite.yml similarity index 100% rename from .github/workflows/nightly.yml rename to .github/workflows/test-suite.yml diff --git a/.github/workflows/push.yml b/.github/workflows/test.yml similarity index 53% rename from .github/workflows/push.yml rename to .github/workflows/test.yml index ccd82c546d9d..4c99f5809b45 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: Push +name: Test on: push: paths-ignore: &ignore_paths @@ -21,6 +21,8 @@ on: paths-ignore: *ignore_paths branches: - '**' + schedule: + - cron: "0 1 * * *" workflow_dispatch: ~ permissions: contents: read @@ -33,20 +35,35 @@ env: jobs: GENERATE_MATRIX: name: Generate Matrix - if: github.repository == 'php/php-src' || github.event_name == 'pull_request' + if: github.repository == 'php/php-src' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest outputs: all_variations: ${{ steps.set-matrix.outputs.all_variations }} branches: ${{ steps.set-matrix.outputs.branches }} steps: - uses: actions/checkout@v6 + with: + # When running nightly, set fetch-depth to 0 to clone the full + # repository including all branches. This is required to find the + # correct commit hashes. + fetch-depth: ${{ (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && 0 || 1 }} + - name: Grab the commit mapping + if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} + uses: actions/cache@v5 + with: + path: branch-commit-cache.json + # The cache key needs to change every time for the + # cache to be updated after this job finishes. + key: nightly-${{ github.run_id }}-${{ github.run_attempt }} + restore-keys: | + nightly- - name: Generate Matrix id: set-matrix - run: php .github/nightly_matrix.php "${{ github.event_name }}" "${{ github.run_attempt }}" "${{ github.ref }}" '${{ toJSON(github.event.pull_request.labels) }}' "${{ github.repository }}" + run: php .github/matrix.php "${{ github.event_name }}" "${{ github.run_attempt }}" "${{ github.ref }}" '${{ toJSON(github.event.pull_request.labels) }}' "${{ github.repository }}" PUSH: needs: GENERATE_MATRIX - name: ${{ matrix.branch.ref }} - uses: ./.github/workflows/nightly.yml + name: ${{ matrix.branch.name }} + uses: ./.github/workflows/test-suite.yml strategy: fail-fast: false matrix: diff --git a/docs/release-process.md b/docs/release-process.md index e5a1dd1f658b..2ce20355e494 100644 --- a/docs/release-process.md +++ b/docs/release-process.md @@ -983,7 +983,7 @@ feature development that cannot go into the new version. applicable files there to reflect the branch cut, and then upmerge that commit 5 times to get it to `master`. The following files need to be updated: - * `.github/nightly_matrix.php` (add new branch, update version for `master`) + * `.github/matrix.php` (add new branch, update version for `master`) [Updating after 8.5 branch cut](https://github.com/php/php-src/commit/197921a8aa7b2f9af103b439bf913e23d6ed1b98) * `.github/scripts/windows/find-target-branch.bat` (update version for `master`)