libretime/.github/workflows/api-schema.yml
Kyle Robbertze a14f1bec0b
ci: only check last commit for API schema in PRs (#3133)
### Description

PRs are intended to be squashed to a single commit. Only checking the
last commit gives us the intended state of the repo and ensures that if
the author commits the schema fixes later, the CI passes as expected.
Currently, the CI will fail because the earlier commits still have an
out of date schema.
2025-01-10 16:56:39 +00:00

108 lines
2.8 KiB
YAML

name: API schema
on:
workflow_dispatch:
push:
branches: [main]
paths:
- .github/workflows/api-schema.yml
- api/**
pull_request:
branches: [main]
paths:
- .github/workflows/api-schema.yml
- api/**
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-api-${{ hashFiles('api/**/setup.py') }}
restore-keys: |
${{ runner.os }}-pip-api
- name: Install
run: make install
working-directory: api
- name: Get pull request commit range
if: github.event_name == 'pull_request'
run: echo "COMMIT_RANGE=${{ github.sha }}~1...${{ github.sha }}" >> $GITHUB_ENV
- name: Get push commit range
if: github.event_name == 'push'
run: echo "COMMIT_RANGE=${{ github.event.before }}..${{ github.sha }}" >> $GITHUB_ENV
- name: Check if schema is outdated
run: |
for commit in $(git rev-list --reverse --no-merges ${{ env.COMMIT_RANGE }}); do
git checkout $commit
make --quiet schema
git diff -- schema.yml
git add schema.yml
git diff-index --quiet HEAD -- || {
echo "ERROR: Schema is outdated for commit $commit"
git show --quiet
exit 1
}
done
working-directory: api
dispatch:
if: >
github.repository_owner == 'libretime'
&& github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/checkout@v4
with:
repository: libretime/client
path: client
ssh-key: "${{ secrets.API_CLIENT_DEPLOY_KEY }}"
- name: Dispatch schema update commits
run: |
git config --global user.name "libretime-bot"
git config --global user.email "libretime-bot@users.noreply.github.com"
for commit in $(git rev-list --reverse --no-merges ${{ github.event.before }}..${{ github.sha }} -- api/schema.yml); do
cp api/schema.yml client/
git show \
--quiet \
--format="%B%n${{ github.repository }}@%H" \
"$commit" \
> commit-message
pushd client/
git add schema.yml
git diff-index --quiet HEAD -- || {
git commit --file=../commit-message
git push
}
popd
rm commit-message
done