# .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<> $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 }}"