Skip to content

Build OpenAPI

Build OpenAPI #31

Workflow file for this run

name: Build OpenAPI
on:
workflow_dispatch:
jobs:
publish:
if: github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Deno
uses: denoland/setup-deno@v2
with:
cache: true
- name: Build
run: deno task build
- name: Calculate tag version
run: |
CURRENT_DATE=$(date +"%Y.%m.%d")
BASE_TAG="${CURRENT_DATE}"
COUNT=1
git fetch --tags
while git rev-parse "$BASE_TAG-$COUNT" >/dev/null 2>&1; do
COUNT=$((COUNT + 1))
done
if [ $COUNT -eq 1 ] && ! git rev-parse "$BASE_TAG" >/dev/null 2>&1; then
FINAL_TAG="$BASE_TAG"
else
FINAL_TAG="$BASE_TAG-$COUNT"
fi
echo "FINAL_TAG=$FINAL_TAG" >> $GITHUB_ENV
echo "$FINAL_TAG"
- name: Create and push Git tag
run: |
git tag "$FINAL_TAG"
git push origin "$FINAL_TAG"
- name: Generate RELEASE.md
id: generate_release_body
run: |
set -eu
OUTPUT="| Service | JSON | YAML | Swagger | Redoc |\n"
OUTPUT="$OUTPUT| --- | :---: | :---: | :---: | :---: |\n"
REFS=""
FILES=$(find gen -type f -name "*.openapi.yaml" | sort)
for FILE in $FILES; do
FILENAME=$(basename "$FILE")
SERVICE=$(echo "$FILENAME" | sed 's/\.openapi\.yaml//')
JSON_FILE="${SERVICE}.openapi.json"
YAML_FILE="${SERVICE}.openapi.yaml"
DL_JSON_URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${FINAL_TAG}/${JSON_FILE}"
DL_YAML_URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${FINAL_TAG}/${YAML_FILE}"
REDOC_URL="https://redocly.github.io/redoc/?url=${DL_YAML_URL}"
SWAGGER_URL="https://editor.swagger.io/?url=https://no-cors.deno.dev/${DL_YAML_URL}"
OUTPUT="$OUTPUT| $SERVICE | [\`json\`][dl.json.$SERVICE] | [\`yaml\`][dl.yaml.$SERVICE] | [Open][swagger.$SERVICE] | [Open][redoc.$SERVICE] |\n"
REFS="$REFS[dl.json.$SERVICE]: $DL_JSON_URL\n"
REFS="$REFS[dl.yaml.$SERVICE]: $DL_YAML_URL\n"
REFS="$REFS[redoc.$SERVICE]: $REDOC_URL\n"
REFS="$REFS[swagger.$SERVICE]: $SWAGGER_URL\n"
done
echo -e "$OUTPUT\n$REFS" > ${{ github.workspace }}-RELEASE.md
cat ${{ github.workspace }}-RELEASE.md
- name: Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.FINAL_TAG }}
body_path: ${{ github.workspace }}-RELEASE.md
generate_release_notes: true
files: |
gen/**.openapi.*