[cache] Standardize cache contract across commands (#162) #214
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Changelog Automation | |
| on: | |
| workflow_call: | |
| inputs: | |
| changelog-file: | |
| description: Path to the managed changelog file. | |
| required: false | |
| type: string | |
| default: CHANGELOG.md | |
| project: | |
| description: Optional GitHub Project V2 number for consumer repositories. When omitted, php-fast-forward repositories default to the first organization project. | |
| required: false | |
| type: string | |
| default: '' | |
| version: | |
| description: Optional version to promote during manual release preparation. | |
| required: false | |
| type: string | |
| default: '' | |
| release-branch-prefix: | |
| description: Prefix used for release-preparation branches. | |
| required: false | |
| type: string | |
| default: release/v | |
| workflow_dispatch: | |
| inputs: | |
| changelog-file: | |
| description: Path to the managed changelog file. | |
| required: false | |
| type: string | |
| default: CHANGELOG.md | |
| project: | |
| description: Optional GitHub Project V2 number for consumer repositories. Leave empty to use the configured repository variable or the php-fast-forward default. | |
| required: false | |
| type: string | |
| default: '' | |
| version: | |
| description: Optional version to promote. Leave empty to infer from Unreleased. | |
| required: false | |
| type: string | |
| default: '' | |
| release-branch-prefix: | |
| description: Prefix used for release-preparation branches. | |
| required: false | |
| type: string | |
| default: release/v | |
| pull_request: | |
| types: [opened, reopened, synchronize] | |
| pull_request_target: | |
| types: [closed] | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| repository-projects: write | |
| concurrency: | |
| group: ${{ github.event.pull_request.number && format('changelog-pr-{0}', github.event.pull_request.number) || format('changelog-{0}', github.ref) }} | |
| cancel-in-progress: ${{ github.event.pull_request.merged != true }} | |
| env: | |
| FORCE_COLOR: '1' | |
| jobs: | |
| resolve_php: | |
| name: Resolve PHP Version | |
| runs-on: ubuntu-latest | |
| outputs: | |
| php-version: ${{ steps.resolve.outputs.php-version }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Resolve workflow PHP version | |
| id: resolve | |
| uses: ./.github/actions/php/resolve-version | |
| validate_pull_request: | |
| name: Validate PR Changelog | |
| needs: resolve_php | |
| if: ${{ github.event.pull_request.number && github.event.pull_request.merged != true && !startsWith(github.event.pull_request.head.ref, inputs.release-branch-prefix || 'release/v') }} | |
| runs-on: ubuntu-latest | |
| env: | |
| CHANGELOG_FILE: ${{ inputs.changelog-file || 'CHANGELOG.md' }} | |
| CHANGELOG_ROOT_VERSION: ${{ github.event.pull_request.head.ref && format('dev-{0}', github.event.pull_request.head.ref) || 'dev-main' }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup PHP and install dependencies | |
| uses: ./.github/actions/php/setup-composer | |
| with: | |
| php-version: ${{ needs.resolve_php.outputs.php-version }} | |
| root-version: ${{ env.CHANGELOG_ROOT_VERSION }} | |
| install-options: --prefer-dist --no-progress --no-interaction --no-plugins --no-scripts | |
| - name: Fetch base branch reference | |
| env: | |
| BASE_REF: ${{ github.event.pull_request.base.ref }} | |
| run: git fetch --no-tags --depth=1 origin "+refs/heads/${BASE_REF}:refs/remotes/origin/${BASE_REF}" | |
| - name: Verify changelog update | |
| env: | |
| BASE_REF: ${{ github.event.pull_request.base.ref }} | |
| run: composer dev-tools changelog:check -- --file="${CHANGELOG_FILE}" --against="origin/${BASE_REF}" | |
| prepare_release_pull_request: | |
| name: Prepare Release Pull Request | |
| needs: resolve_php | |
| if: ${{ !github.event.pull_request.number }} | |
| runs-on: ubuntu-latest | |
| env: | |
| CHANGELOG_FILE: ${{ inputs.changelog-file || 'CHANGELOG.md' }} | |
| RELEASE_BRANCH_PREFIX: ${{ inputs.release-branch-prefix || 'release/v' }} | |
| CHANGELOG_ROOT_VERSION: ${{ format('dev-{0}', github.event.repository.default_branch) }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| token: ${{ github.token }} | |
| ref: ${{ github.event.repository.default_branch }} | |
| fetch-depth: 0 | |
| - name: Setup PHP and install dependencies | |
| uses: ./.github/actions/php/setup-composer | |
| with: | |
| php-version: ${{ needs.resolve_php.outputs.php-version }} | |
| root-version: ${{ env.CHANGELOG_ROOT_VERSION }} | |
| install-options: --prefer-dist --no-progress --no-interaction --no-plugins --no-scripts | |
| - name: Resolve release version | |
| id: version | |
| uses: ./.github/actions/changelog/resolve-version | |
| with: | |
| changelog-file: ${{ env.CHANGELOG_FILE }} | |
| version: ${{ inputs.version || '' }} | |
| - name: Promote changelog release | |
| env: | |
| RELEASE_VERSION: ${{ steps.version.outputs.value }} | |
| run: | | |
| release_date="$(date -u +%F)" | |
| composer dev-tools changelog:promote -- "${RELEASE_VERSION}" --file="${CHANGELOG_FILE}" --date="${release_date}" | |
| - name: Render release notes preview | |
| uses: ./.github/actions/changelog/render-release-notes | |
| with: | |
| changelog-file: ${{ env.CHANGELOG_FILE }} | |
| version: ${{ steps.version.outputs.value }} | |
| - name: Create release preparation pull request | |
| id: create_pr | |
| uses: peter-evans/create-pull-request@v7 | |
| with: | |
| token: ${{ github.token }} | |
| branch: ${{ env.RELEASE_BRANCH_PREFIX }}${{ steps.version.outputs.value }} | |
| delete-branch: false | |
| base: ${{ github.event.repository.default_branch }} | |
| add-paths: | | |
| ${{ env.CHANGELOG_FILE }} | |
| commit-message: Prepare release v${{ steps.version.outputs.value }} | |
| title: Prepare release v${{ steps.version.outputs.value }} | |
| body: | | |
| ## Summary | |
| - promote `Unreleased` into `${{ steps.version.outputs.value }}` | |
| - prepare the GitHub release body from `${{ env.CHANGELOG_FILE }}` | |
| ## Version Resolution | |
| - source: `${{ steps.version.outputs.source }}` | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/project-board/transition-status | |
| with: | |
| project: ${{ inputs.project || vars.PROJECT || '' }} | |
| from-status: Merged | |
| to-status: Release Prepared | |
| - name: Summarize prepared release | |
| run: | | |
| echo "Prepared release version: ${{ steps.version.outputs.value }}" | |
| echo "Pull request operation: ${{ steps.create_pr.outputs.pull-request-operation || 'none' }}" | |
| echo "Pull request URL: ${{ steps.create_pr.outputs.pull-request-url || 'not created' }}" | |
| publish_merged_release: | |
| name: Publish Merged Release | |
| needs: resolve_php | |
| if: ${{ github.event.pull_request.merged == true && github.event.pull_request.base.ref == github.event.repository.default_branch && github.event.pull_request.head.repo.full_name == github.repository && startsWith(github.event.pull_request.head.ref, inputs.release-branch-prefix || 'release/v') }} | |
| runs-on: ubuntu-latest | |
| env: | |
| CHANGELOG_FILE: ${{ inputs.changelog-file || 'CHANGELOG.md' }} | |
| RELEASE_BRANCH_PREFIX: ${{ inputs.release-branch-prefix || 'release/v' }} | |
| CHANGELOG_ROOT_VERSION: ${{ format('dev-{0}', github.event.repository.default_branch) }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| token: ${{ github.token }} | |
| ref: ${{ github.event.pull_request.base.ref }} | |
| fetch-depth: 0 | |
| - name: Setup PHP and install dependencies | |
| uses: ./.github/actions/php/setup-composer | |
| with: | |
| php-version: ${{ needs.resolve_php.outputs.php-version }} | |
| root-version: ${{ env.CHANGELOG_ROOT_VERSION }} | |
| install-options: --prefer-dist --no-progress --no-interaction --no-plugins --no-scripts | |
| - name: Resolve merged release version | |
| id: version | |
| uses: ./.github/actions/changelog/resolve-merged-version | |
| with: | |
| head-ref: ${{ github.event.pull_request.head.ref }} | |
| release-branch-prefix: ${{ env.RELEASE_BRANCH_PREFIX }} | |
| - name: Render release notes | |
| uses: ./.github/actions/changelog/render-release-notes | |
| with: | |
| changelog-file: ${{ env.CHANGELOG_FILE }} | |
| version: ${{ steps.version.outputs.value }} | |
| - name: Publish GitHub release | |
| uses: ./.github/actions/changelog/publish-release | |
| with: | |
| version: ${{ steps.version.outputs.value }} | |
| target: ${{ github.event.pull_request.merge_commit_sha || github.sha }} | |
| - uses: actions/checkout@v6 | |
| - uses: ./.github/actions/project-board/transition-status | |
| with: | |
| project: ${{ inputs.project || vars.PROJECT || '' }} | |
| from-status: Release Prepared | |
| to-status: Released | |
| include-current-pull-request: 'true' |