Skip to content

Build Flarum Install Packages #57

Build Flarum Install Packages

Build Flarum Install Packages #57

Workflow file for this run

# The name is used in flarum/framework/.github/workflows/prepare-release.yml
name: Build Flarum Install Packages
on:
workflow_dispatch:
inputs:
flarum_version:
description: 'Flarum Version'
required: true
type: string
php_versions:
description: 'PHP Versions'
required: true
type: string
jobs:
build:
runs-on: ubuntu-latest
strategy:
# Each matrix job commits + pushes to `main` at the end of `build.sh`. If
# they run in parallel, all but the first push will be rejected with
# `cannot lock ref 'refs/heads/main'` because the remote has moved. Serialize.
max-parallel: 1
matrix:
bundle:
# Bundle with no package manager.
# Not needed for now. Those who do not wish to use the package manager, may install from the CLI.
# - name: default
# value: default
# Bundle with the extension manager.
- name: ''
value: flarum/extension-manager
# A bundle with the extension manager and no public directory/path (mostly for shared hosting).
- name: no-public-dir
value: flarum/extension-manager
name: Build Flarum ${{ inputs.flarum_version }} - ${{ matrix.bundle.name }} Bundle - PHP ${{ inputs.php_versions }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup PHP
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2
with:
php-version: 8.4
coverage: none
extensions: curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip
tools: composer:v2
- name: Run Build Script
run: bin/build.sh
env:
FLARUM_VERSION: ${{ inputs.flarum_version }}
PHP_VERSIONS: ${{ inputs.php_versions }}
BUNDLE_NAME: ${{ matrix.bundle.name }}
BUNDLE_VALUE: ${{ matrix.bundle.value }}
# After all packages for this version are built and committed, open a PR to
# flarum/docs updating the install.md download table to point at them.
docs-pr:
needs: build
runs-on: ubuntu-latest
steps:
- name: Check out installation-packages (for the built files + generator)
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
# Check out the ref the workflow ran on: the `build` job committed the
# freshly-built packages to it, and it carries the generator script.
ref: ${{ github.ref }}
- name: Derive version paths
id: vars
run: |
FULL="v${FLARUM_VERSION#v}"
MAJOR="${FULL#v}"; MAJOR="${MAJOR%%.*}.x"
echo "full=$FULL" >> "$GITHUB_OUTPUT"
echo "major=$MAJOR" >> "$GITHUB_OUTPUT"
echo "packages_dir=packages/v$MAJOR/$FULL" >> "$GITHUB_OUTPUT"
# 2.x is the current (unversioned) docs; older majors are versioned.
if [ "$MAJOR" = "2.x" ]; then
echo "install_md=docs/install.md" >> "$GITHUB_OUTPUT"
else
echo "install_md=versioned_docs/version-$MAJOR/install.md" >> "$GITHUB_OUTPUT"
fi
env:
FLARUM_VERSION: ${{ inputs.flarum_version }}
# Mint a short-lived token from the flarum GitHub App so we can open a PR
# in the separate flarum/docs repo. Requires the DOCS_APP_ID and
# DOCS_APP_PRIVATE_KEY secrets (App scoped to flarum/docs +
# installation-packages with Contents + Pull requests write).
- name: Generate docs App token
id: docs-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
with:
app-id: ${{ secrets.DOCS_APP_ID }}
private-key: ${{ secrets.DOCS_APP_PRIVATE_KEY }}
owner: flarum
repositories: docs
- name: Check out flarum/docs
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: flarum/docs
token: ${{ steps.docs-token.outputs.token }}
path: docs-repo
- name: Regenerate the download table
run: |
FLARUM_VERSION='${{ inputs.flarum_version }}' \
PACKAGES_DIR='${{ steps.vars.outputs.packages_dir }}' \
INSTALL_MD='docs-repo/${{ steps.vars.outputs.install_md }}' \
bin/update-docs-table.sh
- name: Open PR to flarum/docs
id: docs-pr
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
with:
token: ${{ steps.docs-token.outputs.token }}
path: docs-repo
branch: update-install-links-${{ steps.vars.outputs.full }}
base: main
commit-message: "Update ${{ steps.vars.outputs.major }} install download links for ${{ steps.vars.outputs.full }}"
title: "Update ${{ steps.vars.outputs.major }} install download links for ${{ steps.vars.outputs.full }}"
body: |
Updates the install archive download table for **${{ steps.vars.outputs.major }}** to point at the newly built packages for `${{ steps.vars.outputs.full }}`.
Generated automatically by the `flarum/installation-packages` build workflow.
delete-branch: true
# flarum/docs `main` is unprotected and deploys on merge, so merge the
# freshly-opened PR straight away. Only runs when a PR was actually
# created or updated (skips when the table was already up to date).
- name: Merge the docs PR
if: steps.docs-pr.outputs.pull-request-operation == 'created' || steps.docs-pr.outputs.pull-request-operation == 'updated'
env:
GH_TOKEN: ${{ steps.docs-token.outputs.token }}
run: |
gh pr merge "${{ steps.docs-pr.outputs.pull-request-number }}" \
--repo flarum/docs \
--squash --delete-branch