-
-
Notifications
You must be signed in to change notification settings - Fork 840
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: move reusable workflows to monorepo (#3490)
- Loading branch information
Showing
38 changed files
with
363 additions
and
180 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
name: Flarum Backend Jobs | ||
|
||
on: | ||
workflow_call: | ||
inputs: | ||
enable_backend_testing: | ||
description: "Enable Backend Testing?" | ||
type: boolean | ||
default: true | ||
required: false | ||
|
||
backend_directory: | ||
description: The directory of the project where backend code is located. This should contain a `composer.json` file, and is generally the root directory of the repo. | ||
type: string | ||
required: false | ||
default: '.' | ||
|
||
php_versions: | ||
description: Versions of PHP to test with. Should be array of strings encoded as JSON array | ||
type: string | ||
required: false | ||
default: '["7.4", "8.0", "8.1"]' | ||
db_versions: | ||
description: Versions of databases to test with. Should be array of strings encoded as JSON array | ||
type: string | ||
required: false | ||
default: '["mysql:5.7", "mariadb"]' | ||
|
||
php_ini_values: | ||
description: PHP ini values | ||
type: string | ||
required: false | ||
default: error_reporting=E_ALL | ||
|
||
env: | ||
COMPOSER_ROOT_VERSION: dev-main | ||
FLARUM_TEST_TMP_DIR_LOCAL: tests/integration/tmp | ||
|
||
jobs: | ||
test: | ||
runs-on: ubuntu-latest | ||
|
||
strategy: | ||
matrix: | ||
php: ${{ fromJSON(inputs.php_versions) }} | ||
service: ${{ fromJSON(inputs.db_versions) }} | ||
prefix: ['', flarum_] | ||
|
||
include: | ||
- service: 'mysql:5.7' | ||
db: MySQL | ||
- service: mariadb | ||
db: MariaDB | ||
- prefix: flarum_ | ||
prefixStr: (prefix) | ||
|
||
exclude: | ||
- php: 8.0 | ||
service: 'mysql:5.7' | ||
prefix: flarum_ | ||
- php: 8.0 | ||
service: mariadb | ||
prefix: flarum_ | ||
|
||
services: | ||
mysql: | ||
image: ${{ matrix.service }} | ||
ports: | ||
- 13306:3306 | ||
|
||
name: 'PHP ${{ matrix.php }} / ${{ matrix.db }} ${{ matrix.prefixStr }}' | ||
|
||
if: inputs.enable_backend_testing | ||
|
||
steps: | ||
- uses: actions/checkout@master | ||
|
||
- name: Setup PHP | ||
uses: shivammathur/setup-php@v2 | ||
with: | ||
php-version: ${{ matrix.php }} | ||
coverage: xdebug | ||
extensions: curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip | ||
tools: phpunit, composer:v2 | ||
ini-values: ${{ inputs.php_ini_values }} | ||
|
||
# The authentication alter is necessary because newer mysql versions use the `caching_sha2_password` driver, | ||
# which isn't supported prior to PHP7.4 | ||
# When we drop support for PHP7.3, we should remove this from the setup. | ||
- name: Create MySQL Database | ||
run: | | ||
sudo systemctl start mysql | ||
mysql -uroot -proot -e 'CREATE DATABASE flarum_test;' --port 13306 | ||
mysql -uroot -proot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';" --port 13306 | ||
- name: Install Composer dependencies | ||
run: composer install | ||
working-directory: ${{ inputs.backend_directory }} | ||
|
||
- name: Setup Composer tests | ||
run: composer test:setup | ||
working-directory: ${{ inputs.backend_directory }} | ||
env: | ||
DB_PORT: 13306 | ||
DB_PASSWORD: root | ||
DB_PREFIX: ${{ matrix.prefix }} | ||
|
||
- name: Run Composer tests | ||
run: composer test | ||
working-directory: ${{ inputs.backend_directory }} | ||
env: | ||
COMPOSER_PROCESS_TIMEOUT: 600 |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,215 @@ | ||
name: Flarum Frontend Jobs | ||
|
||
on: | ||
workflow_call: | ||
inputs: | ||
enable_bundlewatch: | ||
description: "Enable Bundlewatch?" | ||
type: boolean | ||
default: false | ||
required: false | ||
enable_prettier: | ||
description: "Enable Prettier?" | ||
type: boolean | ||
default: true | ||
required: false | ||
enable_typescript: | ||
description: "Enable TypeScript?" | ||
type: boolean | ||
default: true | ||
required: false | ||
|
||
backend_directory: | ||
description: The directory of the project where backend code is located. This should contain a `composer.json` file, and is generally the root directory of the repo. | ||
type: string | ||
required: false | ||
default: '.' | ||
frontend_directory: | ||
description: The directory of the project where frontend code is located. This should contain a `package.json` file. | ||
type: string | ||
required: false | ||
default: './js' | ||
main_git_branch: | ||
description: The main git branch to use for the workflow. | ||
type: string | ||
required: false | ||
default: main | ||
node_version: | ||
description: The node version to use for the workflow. | ||
type: number | ||
required: false | ||
default: 16 | ||
|
||
js_package_manager: | ||
description: "Enable TypeScript?" | ||
type: string | ||
default: yarn | ||
required: false | ||
secrets: | ||
bundlewatch_github_token: | ||
description: The GitHub token to use for Bundlewatch. | ||
required: false | ||
|
||
env: | ||
COMPOSER_ROOT_VERSION: dev-main | ||
ci_script: ${{ inputs.js_package_manager == 'yarn' && 'yarn install --immutable' || 'npm ci' }} | ||
cache_dependency_path: ${{ format(inputs.js_package_manager == 'yarn' && '{0}/yarn.lock' || '{0}/package-lock.json', inputs.frontend_directory) }} | ||
|
||
jobs: | ||
bundlewatch: | ||
name: Bundlewatch | ||
runs-on: ubuntu-latest | ||
if: inputs.enable_bundlewatch | ||
|
||
steps: | ||
- name: Check out code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set up Node | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: ${{ inputs.node_version }} | ||
cache: ${{ inputs.js_package_manager }} | ||
cache-dependency-path: ${{ env.cache_dependency_path }} | ||
|
||
- name: Build production assets | ||
uses: flarum/action-build@2 | ||
with: | ||
github_token: ${{ secrets.github_token }} | ||
build_script: build | ||
package_manager: ${{ inputs.js_package_manager }} | ||
js_path: ${{ inputs.frontend_directory }} | ||
do_not_commit: true | ||
|
||
- name: Check bundle size change | ||
run: node_modules/.bin/bundlewatch --config .bundlewatch.config.json | ||
working-directory: ${{ inputs.frontend_directory }} | ||
env: | ||
BUNDLEWATCH_GITHUB_TOKEN: ${{ secrets.bundlewatch_github_token }} | ||
CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }} | ||
|
||
prettier: | ||
name: Prettier | ||
runs-on: ubuntu-latest | ||
if: inputs.enable_prettier | ||
|
||
steps: | ||
- name: Check out code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set up Node | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: ${{ inputs.node_version }} | ||
cache: ${{ inputs.js_package_manager }} | ||
cache-dependency-path: ${{ env.cache_dependency_path }} | ||
|
||
- name: Install JS dependencies | ||
run: ${{ env.ci_script }} | ||
working-directory: ${{ inputs.frontend_directory }} | ||
|
||
- name: Check JS formatting | ||
run: ${{ inputs.js_package_manager }} run format-check | ||
working-directory: ${{ inputs.frontend_directory }} | ||
|
||
typecheck: | ||
name: Typecheck | ||
runs-on: ubuntu-latest | ||
if: inputs.enable_typescript | ||
|
||
steps: | ||
- name: Check out code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set up Node | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: ${{ inputs.node_version }} | ||
cache: ${{ inputs.js_package_manager }} | ||
cache-dependency-path: ${{ env.cache_dependency_path }} | ||
|
||
- name: Setup PHP | ||
uses: shivammathur/setup-php@v2 | ||
with: | ||
php-version: '8.0' | ||
extensions: curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip | ||
tools: composer:v2 | ||
|
||
# Needed since tsconfig draws typings from vendor folder. | ||
- name: Install Composer dependencies | ||
run: composer install | ||
working-directory: ${{ inputs.backend_directory }} | ||
|
||
- name: Install JS dependencies | ||
run: ${{ env.ci_script }} | ||
working-directory: ${{ inputs.frontend_directory }} | ||
|
||
- name: Typecheck | ||
run: ${{ inputs.js_package_manager }} run check-typings | ||
working-directory: ${{ inputs.frontend_directory }} | ||
|
||
type-coverage: | ||
name: Type Coverage | ||
runs-on: ubuntu-latest | ||
if: inputs.enable_typescript | ||
|
||
steps: | ||
- name: Check out code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set up Node | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: ${{ inputs.node_version }} | ||
cache: ${{ inputs.js_package_manager }} | ||
cache-dependency-path: ${{ env.cache_dependency_path }} | ||
|
||
- name: Install JS dependencies | ||
run: ${{ env.ci_script }} | ||
working-directory: ${{ inputs.frontend_directory }} | ||
|
||
- name: Check type coverage | ||
run: ${{ inputs.js_package_manager }} run check-typings-coverage | ||
working-directory: ${{ inputs.frontend_directory }} | ||
|
||
build: | ||
name: Build | ||
runs-on: ubuntu-latest | ||
if: "always() && !contains(needs.*.result, 'failed') && !contains(needs.*.result, 'cancelled')" | ||
needs: [bundlewatch, prettier, typecheck, type-coverage] | ||
|
||
steps: | ||
- name: Check out code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set up Node | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: ${{ inputs.node_version }} | ||
cache: ${{ inputs.js_package_manager }} | ||
cache-dependency-path: ${{ env.cache_dependency_path }} | ||
|
||
# Our action will install npm/yarn, cd into `${{ inputs.frontend_directory }}`, build dist JS and typings, | ||
# then commit and upload any changes iff we are on the main branch and have just pushed. | ||
- name: Build production JS | ||
if: inputs.enable_typescript | ||
uses: flarum/action-build@2 | ||
with: | ||
github_token: ${{ secrets.GITHUB_TOKEN }} | ||
build_script: build | ||
package_manager: ${{ inputs.js_package_manager }} | ||
typings_script: build-typings | ||
js_path: ${{ inputs.frontend_directory }} | ||
do_not_commit: ${{ github.ref != format('refs/heads/{0}', inputs.main_git_branch) || github.event_name != 'push' }} | ||
|
||
# Our action will install npm/yarn, cd into `${{ inputs.frontend_directory }}`, build dist JS and typings, | ||
# then commit and upload any changes iff we are on the main branch and have just pushed. | ||
- name: Build production JS | ||
if: "! inputs.enable_typescript" | ||
uses: flarum/action-build@2 | ||
with: | ||
github_token: ${{ secrets.GITHUB_TOKEN }} | ||
build_script: build | ||
package_manager: ${{ inputs.js_package_manager }} | ||
js_path: ${{ inputs.frontend_directory }} | ||
do_not_commit: ${{ github.ref != format('refs/heads/{0}', inputs.main_git_branch) || github.event_name != 'push' }} |
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
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
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
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
Oops, something went wrong.