@@ -230,6 +230,7 @@ jobs:
230230 logout : true
231231
232232 - name : Semantic Release
233+ id : semantic-release
233234 uses : cycjimmy/semantic-release-action@b1b432f13acb7768e0c8efdec416d363a57546f2 # v4.1.1
234235 if : steps.cache.outputs.cache-hit != 'true' # do not run if cache hit
235236 with :
@@ -241,3 +242,40 @@ jobs:
241242 @semantic-release/exec@6.0.3
242243 env :
243244 GITHUB_TOKEN : ${{ secrets.ROSIE_TOKEN }}
245+
246+ - name : Check if OpenAPI files changed
247+ id : check-openapi-changes
248+ run : |
249+ git fetch origin main:main
250+ if git diff --name-only main HEAD | grep -q '^internal/controller/openapi/'; then
251+ echo "changed=true" >> $GITHUB_OUTPUT
252+ else
253+ echo "changed=false" >> $GITHUB_OUTPUT
254+ fi
255+
256+ - name : Generate OpenAPI specification
257+ if : steps.semantic-release.outputs.new_release_published == 'true' && steps.check-openapi-changes.outputs.changed == 'true'
258+ run : |
259+ GIN_MODE=debug go run ./cmd/app/main.go
260+
261+ - name : Verify OpenAPI spec was generated
262+ run : |
263+ if [ ! -f "doc/openapi.json" ]; then
264+ exit 1
265+ fi
266+ head -20 doc/openapi.json
267+
268+ - name : Push to SwaggerHub
269+ if : vars.SWAGGERHUB_OWNER != '' && vars.SWAGGERHUB_API_NAME != ''
270+ env :
271+ SWAGGERHUB_API_KEY : ${{ secrets.SWAGGERHUB_API_KEY }}
272+ SWAGGERHUB_OWNER : ${{ vars.SWAGGERHUB_OWNER }}
273+ API_NAME : ${{ vars.SWAGGERHUB_API_NAME }}
274+ API_VERSION : ${{ steps.semantic-release.outputs.new_release_version }}
275+ run : |
276+ echo "Pushing OpenAPI spec to SwaggerHub with version ${{ steps.semantic-release.outputs.new_release_version }}..."
277+ curl -X POST "https://api.swaggerhub.com/apis/${SWAGGERHUB_OWNER}/${API_NAME}/${API_VERSION}" \
278+ -H "Authorization: ${SWAGGERHUB_API_KEY}" \
279+ -H "Content-Type: application/json" \
280+ --data-binary @doc/openapi.json \
281+ --fail
0 commit comments