Files
doc-exports/.gitea/workflows/openapi.yml

110 lines
3.3 KiB
YAML

# .gitea/workflows/openapi.yml
name: OpenAPI evaluation
on:
push:
branches:
- main
pull_request:
branches:
- main
paths:
- 'docs/*/openapi/*.yaml'
- 'docs/*/openapi/*.yml'
jobs:
openapi:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Dump Gitea env
run: |
env | sort | grep GITEA
- name: Get base branch name
id: base
run: |
base_ref=$(jq -r '.pull_request.base.ref' "$GITEA_PATH")
echo "base_ref=$base_ref"
echo "${{ gitea.base_ref }}"
BASE_SHA="${{ gitea.event.pull_request.base.sha }}"
echo "Base SHA: $BASE_SHA"
- name: Get changed files other method
id: changed-files
run: |
BASE_SHA="${{ gitea.event.pull_request.base.sha }}"
echo "Base SHA: $BASE_SHA"
git fetch origin $BASE_SHA
echo "changed_files=$(git diff --name-only ${BASE_SHA}...HEAD | grep -E '^docs/[^/]+/openapi/.*\.(yaml|yml)$' | xargs)" >> $GITHUB_OUTPUT
- name: List changed files
run: |
for file in ${{ steps.changed-files.outputs.changed_files }}; do
echo "$file was changed"
done
- name: Get changed OpenAPI files (branch URLs)
id: changed-urls
run: |
BASE_SHA="${{ gitea.event.pull_request.base.sha }}"
git fetch origin $BASE_SHA
# Use PR branch if available, otherwise push branch
BRANCH="${{ gitea.head_ref }}"
if [ -z "$BRANCH" ]; then
BRANCH="${{ gitea.ref_name }}"
fi
REPO_URL="${{ gitea.server_url }}/${{ gitea.repository }}"
# Only docs/*/openapi/*.yaml or yml
# FILES=$(git diff --name-only ${BASE_SHA}...HEAD \
# | grep -E '^docs/[^/]+/openapi/.*\.(yaml|yml)$' || true)
echo "changed urls"
for file in ${{ steps.changed-files.outputs.changed_files }}; do
echo "$REPO_URL/src/branch/$BRANCH/$file"
done
echo "changed_urls<<EOF" >> $GITHUB_OUTPUT
for file in ${{ steps.changed-files.outputs.changed_files }}; do
echo "$REPO_URL/src/branch/$BRANCH/$file"
done >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: List URLs
run: |
while IFS= read -r url; do
echo "$url was changed"
done <<< "${{ steps.changed-urls.outputs.changed_urls }}"
- name: Validate OpenAPI files
env:
OPENAPI_TOKEN: ${{ secrets.OPENAPI_TOKEN }}
run: |
while IFS= read -r url; do
[ -z "$url" ] && continue
echo "$(jq -n --arg path "$url" '{path: $path, export: "xml", ruleset: "default"}')"
echo "Validating $url"
curl -sS -X POST "https://openapi-validator.eco-preprod.tsi-dev.otc-service.com/api/validate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAPI_TOKEN" \
-d "$(jq -n \
--arg path "$url" \
'{path: $path, export: "xml", ruleset: "default"}')"
echo
done <<< "${{ steps.changed-urls.outputs.changed_urls }}"