Sync dry-run from dist-$STACK-develop/ to dist-$STACK-stable/ #43
Workflow file for this run
This file contains 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: Platform packages sync from -develop/ to -stable/ | |
run-name: Sync${{ inputs.dry-run == true && ' dry-run' || '' }} from dist-$STACK-develop/ to dist-$STACK-stable/ | |
env: | |
stacks_list_for_shell_expansion: "{heroku-20,heroku-22}" | |
on: | |
workflow_dispatch: | |
inputs: | |
stack-heroku-20: | |
description: 'Sync heroku-20 packages' | |
type: boolean | |
default: true | |
required: false | |
stack-heroku-22: | |
description: 'Sync heroku-22 packages' | |
type: boolean | |
default: true | |
required: false | |
dry-run: | |
description: 'Only list package changes, without syncing' | |
type: boolean | |
default: false | |
required: false | |
permissions: | |
contents: read | |
jobs: | |
stack-list: | |
runs-on: ubuntu-22.04 | |
outputs: | |
stacks: ${{ steps.list-stacks.outputs.matrix }} | |
steps: | |
- name: Install jq tool | |
run: | | |
sudo apt-get update | |
sudo apt-get install jq | |
- id: list-stacks | |
name: Generate list of stacks to sync based on input checkboxes | |
run: | | |
echo '## Stacks to sync' >> "$GITHUB_STEP_SUMMARY" | |
set -o pipefail | |
stacks=(${{ inputs.stack-heroku-20 == true && 'heroku-20' || ''}} ${{ inputs.stack-heroku-22 == true && 'heroku-22' || ''}}) | |
printf "%s\n" "${stacks[@]}" | xargs -n1 echo - >> "$GITHUB_STEP_SUMMARY" | |
echo -n "matrix=" >> "$GITHUB_OUTPUT" | |
printf "%s\n" "${stacks[@]}" | jq -jcRn '[inputs|select(length>0)]' >> "$GITHUB_OUTPUT" | |
docker-build: | |
needs: [stack-list] | |
if: ${{ needs.stack-list.outputs.stacks != '[]' && needs.stack-list.outputs.stacks != '' }} | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
stack: ${{ fromJSON(needs.stack-list.outputs.stacks) }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Restore cached Docker image | |
id: restore-docker | |
uses: actions/cache/restore@v3 | |
with: | |
key: docker-cache-heroku-php-build-${{matrix.stack}}.${{github.sha}} | |
path: /tmp/docker-cache.tar.gz | |
- name: Load cached Docker image | |
if: steps.restore-docker.outputs.cache-hit == 'true' | |
run: docker load -i /tmp/docker-cache.tar.gz | |
- name: Build Docker image | |
if: steps.restore-docker.outputs.cache-hit != 'true' | |
run: docker build --tag heroku-php-build-${{matrix.stack}}:${{github.sha}} --file support/build/_docker/${{matrix.stack}}.Dockerfile . | |
- name: Save built Docker image | |
if: steps.restore-docker.outputs.cache-hit != 'true' | |
run: docker save heroku-php-build-${{matrix.stack}}:${{github.sha}} | gzip -1 > /tmp/docker-cache.tar.gz | |
- name: Cache built Docker image | |
if: steps.restore-docker.outputs.cache-hit != 'true' | |
uses: actions/cache/save@v3 | |
with: | |
key: ${{ steps.restore-docker.outputs.cache-primary-key }} | |
path: /tmp/docker-cache.tar.gz | |
sync: | |
needs: [stack-list, docker-build] | |
if: ${{ needs.stack-list.outputs.stacks != '[]' && needs.stack-list.outputs.stacks != '' }} | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
stack: ${{ fromJSON(needs.stack-list.outputs.stacks) }} | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Restore cached Docker build | |
uses: actions/cache/restore@v3 | |
with: | |
key: docker-cache-heroku-php-build-${{matrix.stack}}.${{github.sha}} | |
path: /tmp/docker-cache.tar.gz | |
- name: Load cached Docker image | |
run: docker load -i /tmp/docker-cache.tar.gz | |
- name: Dry-run sync.sh to show package changes available for syncing to production bucket | |
if: ${{ inputs.dry-run == true }} | |
run: | | |
set -o pipefail | |
(yes n 2>/dev/null || true) | docker run --rm -i --env-file=support/build/_docker/env.default heroku-php-build-${{matrix.stack}}:${{github.sha}} sync.sh lang-php dist-${{matrix.stack}}-stable/ 2>&1 | tee sync.out | |
- name: Sync changed packages to production bucket | |
if: ${{ inputs.dry-run == false }} | |
run: | | |
set -o pipefail | |
(yes 2>/dev/null || true) | docker run --rm -i --env-file=support/build/_docker/env.default heroku-php-build-${{matrix.stack}}:${{github.sha}} sync.sh lang-php dist-${{matrix.stack}}-stable/ 2>&1 | tee sync.out | |
- name: Output job summary | |
run: | | |
echo '## Package changes ${{ inputs.dry-run == true && 'available for syncing' || 'synced' }} to ${{matrix.stack}} production bucket' >> "$GITHUB_STEP_SUMMARY" | |
echo "${{ inputs.dry-run == true && '**This is output from a dry-run**, no changes have been synced to production:' || '-n' }}" >> "$GITHUB_STEP_SUMMARY" | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
sed -n '/The following packages will/,$p' sync.out >> "$GITHUB_STEP_SUMMARY" | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
devcenter-generate: | |
needs: [sync, docker-build] | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install PHP and Composer | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: "8.2" | |
tools: "composer:2.6" | |
- name: Install Dev Center generator dependencies | |
run: | | |
composer install -d support/devcenter/ | |
- name: Generate Dev Center article tables | |
run: | | |
urls=( https://lang-php.s3.amazonaws.com/dist-${{ env.stacks_list_for_shell_expansion }}-${{ inputs.dry-run == true && 'develop' || 'stable' }}/packages.json ) | |
for section in runtimes built-in-extensions third-party-extensions composers webservers; do | |
support/devcenter/generate.php --"$section" "${urls[@]}" > php-support-"$section".md | |
done | |
- name: Print Dev Center article tables | |
run: | | |
echo '## Generated ["PHP Support" Dev Center article](https://devcenter.heroku.com/articles/php-support) tables' >> "$GITHUB_STEP_SUMMARY" | |
echo "${{ inputs.dry-run == true && '**This is based on the source bucket (due to dry-run mode)**, not the production bucket.' || '-n' }}" >> "$GITHUB_STEP_SUMMARY" | |
echo '### [Runtimes](https://devcenter.heroku.com/articles/php-support#available-versions) | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
cat php-support-runtimes.md >> "$GITHUB_STEP_SUMMARY" | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
echo '### [Built-in extensions](https://devcenter.heroku.com/articles/php-support#available-built-in-extensions) | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
cat php-support-built-in-extensions.md >> "$GITHUB_STEP_SUMMARY" | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
echo '### [Third-party extensions](https://devcenter.heroku.com/articles/php-support#available-third-party-extensions) | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
cat php-support-third-party-extensions.md >> "$GITHUB_STEP_SUMMARY" | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
echo '### [Composers](https://devcenter.heroku.com/articles/php-support#available-composer-versions) | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
cat php-support-composers.md >> "$GITHUB_STEP_SUMMARY" | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
echo '### [Web Servers](https://devcenter.heroku.com/articles/php-support#web-servers) | |
echo '```' >> "$GITHUB_STEP_SUMMARY" | |
cat php-support-webservers.md >> "$GITHUB_STEP_SUMMARY" | |
echo '```' >> "$GITHUB_STEP_SUMMARY" |