168 lines
5.2 KiB
YAML
168 lines
5.2 KiB
YAML
name: "Spec"
|
||
on:
|
||
push:
|
||
branches:
|
||
- main
|
||
tags:
|
||
- v*
|
||
pull_request:
|
||
workflow_dispatch:
|
||
|
||
jobs:
|
||
validate-openapi:
|
||
name: "🔎 Validate OpenAPI specifications"
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: "📥 Source checkout"
|
||
uses: actions/checkout@v2
|
||
- name: "➕ Setup Node"
|
||
uses: actions/setup-node@v2
|
||
with:
|
||
node-version: '14'
|
||
- name: "⚙️ npm"
|
||
working-directory: "./scripts"
|
||
run: |
|
||
npm install
|
||
- name: "🔎 Run validator"
|
||
working-directory: "./scripts"
|
||
run: |
|
||
node validator.js -s "../data/api/client-server"
|
||
|
||
check-examples:
|
||
name: "🔎 Check Event schema examples"
|
||
runs-on: ubuntu-latest
|
||
container: uhoreg/matrix-doc-build
|
||
steps:
|
||
- name: "📥 Source checkout"
|
||
uses: actions/checkout@v2
|
||
- name: "🔎 Run validator"
|
||
run: |
|
||
/env/bin/python scripts/check-event-schema-examples.py
|
||
|
||
build-openapi:
|
||
name: "🐍 Build OpenAPI definitions"
|
||
runs-on: ubuntu-latest
|
||
container: "python:3.9"
|
||
steps:
|
||
- name: "📥 Source checkout"
|
||
uses: actions/checkout@v2
|
||
- name: "📦 Asset creation"
|
||
run: |
|
||
python3 -m venv env && . env/bin/activate
|
||
pip install -r scripts/requirements.txt
|
||
scripts/generate-matrix-org-assets
|
||
- name: "📤 Artifact upload"
|
||
uses: actions/upload-artifact@v2
|
||
with:
|
||
name: openapi-artifact
|
||
path: assets.tar.gz
|
||
|
||
build-spec:
|
||
name: "📖 Build the spec"
|
||
runs-on: ubuntu-latest
|
||
needs: [build-openapi]
|
||
steps:
|
||
- name: "➕ Setup Node"
|
||
uses: actions/setup-node@v2
|
||
with:
|
||
node-version: '14'
|
||
- name: "➕ Setup Hugo"
|
||
uses: peaceiris/actions-hugo@c03b5dbed22245418539b65eb9a3b1d5fdd9a0a6
|
||
with:
|
||
hugo-version: '0.85.0'
|
||
extended: true
|
||
- name: "📥 Source checkout"
|
||
uses: actions/checkout@v2
|
||
with:
|
||
submodules: 'recursive'
|
||
- name: "⚙️ npm"
|
||
run: |
|
||
npm i
|
||
npm run get-proposals
|
||
|
||
# For PRs, set the baseURL to `/`.
|
||
# For releases, set the baseURL to `/$tag` (eg: `/v1.2`).
|
||
# Otherwise, set it to `/unstable`.
|
||
- name: "⚙️ Calculate baseURL"
|
||
id: set-baseurl
|
||
# Double brackets on the elif to avoid auto-escaping refs/tags/* because we need
|
||
# the asterisk matching behaviour, not the literal string.
|
||
run: |
|
||
if [ "${GITHUB_EVENT_NAME}" == "pull_request" ]; then
|
||
echo ::set-output name=baseURL::/
|
||
elif [[ "${GITHUB_REF}" == refs/tags/* ]]; then
|
||
echo ::set-output name=baseURL::"/${GITHUB_REF/refs\/tags\//}"
|
||
else
|
||
echo ::set-output name=baseURL::/unstable
|
||
fi
|
||
|
||
- name: "⚙️ hugo"
|
||
run: hugo --baseURL "${{ steps.set-baseurl.outputs.baseURL }}" -d "spec"
|
||
|
||
# We manually copy the spec OpenAPI definition JSON to the website tree
|
||
# to make it available to the world in a canonical place:
|
||
# https://spec.matrix.org/latest/client-server-api/api.json
|
||
# Works for /unstable/ and /v1.1/ as well.
|
||
- name: "📥 Spec definition download"
|
||
uses: actions/download-artifact@v2
|
||
with:
|
||
name: openapi-artifact
|
||
- name: "📝 Copy the definition to the right location"
|
||
run: |
|
||
tar -xzf assets.tar.gz
|
||
cp assets/spec/client_server/api.json spec/client-server-api/
|
||
|
||
- name: "📦 Tarball creation"
|
||
run: tar -czf spec.tar.gz spec
|
||
- name: "📤 Artifact upload"
|
||
uses: actions/upload-artifact@v2
|
||
with:
|
||
name: spec-artifact
|
||
path: spec.tar.gz
|
||
|
||
build-historical-spec:
|
||
name: "📖 Build the historical backup spec"
|
||
runs-on: ubuntu-latest
|
||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
||
steps:
|
||
- name: "➕ Setup Node"
|
||
uses: actions/setup-node@v2
|
||
with:
|
||
node-version: '14'
|
||
- name: "➕ Setup Hugo"
|
||
uses: peaceiris/actions-hugo@c03b5dbed22245418539b65eb9a3b1d5fdd9a0a6
|
||
with:
|
||
hugo-version: '0.85.0'
|
||
extended: true
|
||
- name: "📥 Source checkout"
|
||
uses: actions/checkout@v2
|
||
with:
|
||
submodules: 'recursive'
|
||
- name: "⚙️ npm"
|
||
run: |
|
||
npm i
|
||
npm run get-proposals
|
||
- name: "⚙️ hugo"
|
||
# Create a baseURL like `/v1.2` out of the `v1.2` tag
|
||
run: |
|
||
echo -e '[params.version]\nstatus="historical"' > historical.toml
|
||
hugo --config config.toml,historical.toml --baseURL "/${GITHUB_REF/refs\/tags\//}" -d "spec"
|
||
|
||
# Copying the spec definition to the tree
|
||
- name: "📥 Spec definition download"
|
||
uses: actions/download-artifact@v2
|
||
with:
|
||
name: openapi-artifact
|
||
- name: "📝 Copy the definition to the right location"
|
||
run: |
|
||
tar -xzf assets.tar.gz
|
||
cp assets/spec/client_server/api.json spec/client-server-api/
|
||
|
||
- name: "📦 Tarball creation"
|
||
run: tar -czf spec-historical.tar.gz spec
|
||
- name: "📤 Artifact upload"
|
||
uses: actions/upload-artifact@v2
|
||
with:
|
||
name: spec-historical-artifact
|
||
path: spec-historical.tar.gz
|