Cb-tumblebug: Automate opening a PR to update Swagger API doc by a workflow

Created on 28 Sep 2021  ยท  10Comments  ยท  Source: cloud-barista/cb-tumblebug

  • ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๋Š” ์†Œ์Šค์ฝ”๋“œ์— API ๊ด€๋ จ ๋‚ด์šฉ(struct, comment ๋“ฑ)์„ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ, make swag ์„ ํ†ตํ•ด API ๋ฌธ์„œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๊ฐ€ PR์„ ์—ด์–ด์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (https://github.com/cloud-barista/cb-tumblebug/wiki/API-Document-Update)

  • ํ˜„์žฌ ์ด ๊ณผ์ •(make swag ๋˜๋Š” swag init)์„ ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๊ฐ€ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋‹ค์†Œ ๊ท€์ฐฎ์€ ์ž‘์—…์ž…๋‹ˆ๋‹ค. (API ์ˆ˜์ •์— ๋Œ€ํ•œ ๋ฆฌ๋ทฐ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ๋ณดํ†ต ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์„œ์— ๋Œ€ํ•ด์„œ ๋”ฐ๋กœ ๋ฆฌ๋ทฐ๊ฐ€ ํ•„์š”ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.)

  • Workflow action์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž๋™ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์—†์„๊นŒ์š”?

    • https://github.com/cloud-barista/cb-tumblebug/tree/main/.github/workflows



      • *.go ํŒŒ์ผ์— ๋Œ€ํ•œ ์ˆ˜์ • commit์ด main branch์— merge๋œ ๊ฒฝ์šฐ,


      • background์—์„œ ์ž๋™์œผ๋กœ 'make swag'์„ ์ˆ˜ํ–‰ํ•˜๊ณ 


      • docs.go, swagger.json, swagger.yaml ํŒŒ์ผ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ด๋ฅผ ์ปค๋ฐ‹ํ•˜์—ฌ PR์„ ์˜คํ”ˆ



๋„์›€ ์ฃผ์‹œแ†ฏ ๋ถ€แ†ซ~?

feature request

Most helpful comment

@seokho-son

github workflow๋Š” ํ•ด๋ณธ์ ์ด ์—†์ง€๋งŒ Travis CI๋Š” ํšŒ์‚ฌ์—์„œ ์จ๋ณธ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋น„์Šทํ• ํ…Œ๋‹ˆ ํ•œ ๋ฒˆ ์‹œ๋„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

All 10 comments

[Pseudocode]

  • Workflow ์‹คํ–‰ ์กฐ๊ฑด ํ›„๋ณด๋“ค:

    • src/core/*/*.go ํŒŒ์ผ OR src/api/rest/server/*/*.go ํŒŒ์ผ์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

  • ๋‹จ๊ณ„

    • Checkout CB-TB codes (using actions/checkout@v2)

    • (ํ•„์š” ์‹œ) go build๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ ๊ตฌ์ถ•

    • swag ์„ค์น˜ (go install ... ๋กœ ์„ค์น˜ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋งŒ์•ฝ go build๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด, swag ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ฐ›์•„์„œ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ์Œ)

    • src/ ์—์„œ make swag ์‹คํ–‰

    • Create Pull Request (์ฐธ๊ณ )

    • docs.go, swagger.json, swagger.yaml ํŒŒ์ผ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ์ง€ ์ฒดํฌํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ PR์„ ์—ด๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ์Œ

@computerphilosopher
Github workflow ๋งŒ๋“ค์–ด๋ณด์‹  ์  ์žˆ์œผ์‹ ๊ฐ€์š”? ^^ (์˜ˆ์ „์— test workflow ์ œ์•ˆํ•ด์ฃผ์…จ๋˜ ๊ฒƒ์ด ์ƒ๊ฐ๋‚ฌ์Šต๋‹ˆ๋‹ค.)
ํ˜น์‹œ ๊ธฐ์—ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์‹ค์ง€ ๋ฌธ์˜ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํŽธํ•˜๊ฒŒ ์‘๋‹ต ์ฃผ์„ธ์š”

@seokho-son

github workflow๋Š” ํ•ด๋ณธ์ ์ด ์—†์ง€๋งŒ Travis CI๋Š” ํšŒ์‚ฌ์—์„œ ์จ๋ณธ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋น„์Šทํ• ํ…Œ๋‹ˆ ํ•œ ๋ฒˆ ์‹œ๋„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@computerphilosopher
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!! ๐Ÿ‘

ํ•˜์‹œ๋ฉด์„œ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”~! (์ฐธ๊ณ ๋กœ ์ž‘์„ฑํ•œ workflow์˜ ํ…Œ์ŠคํŠธ๋Š” 1์ฐจ์ ์œผ๋กœ๋Š” ๋ณธ์ธ์˜ forked repository์—์„œ ๋Œ๋ ค๋ณด์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ์ด์Šˆ๋กœ upstream์—์„œ ๋ฐ”๋กœ ๊ตฌ๋™์‹œํ‚ฌ ์ˆ˜๋Š” ์—†์„ ๊ฑฐ์˜ˆ์š”.)

@jihoon-seo ๋‹˜~
ํ˜น์‹œ @computerphilosopher ๊ธฐ์—ฌ์ž๊ป˜์„œ ์ฐธ๊ณ ํ•˜์‹ค๋งŒํ•œ reference๊ฐ€ ์žˆ์„๊นŒ์š”? ^^
๋Œ€๋žต ๊ธฐ์–ต๋‚˜์‹œ๋Š” ๊ฒƒ์ด ์žˆ์œผ์‹œ๋ฉด ๊ณต์œ ํ•ด์ฃผ์„ธ์š”~~

/assign @computerphilosopher

@hermitkim1 ๋‹˜~ ์ข‹์€ ์ •๋ณด๊ฐ€ ์žˆ์œผ์‹œ๋ฉด ์—ฌ๊ธฐ ๊ณต์œ ํ•ด์ฃผ์„ธ์š” ^^
(๋‚˜์ค‘์— @computerphilosopher ๊ป˜์„œ PR ์˜คํ”ˆํ•˜์‹œ๋ฉด, ๋ฆฌ๋ทฐ๋„ ๋ถ€ํƒ๋“œ๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!! ใ…Žใ…Ž)

reference ๋“ฑ์„ ํ•œ๋ฒˆ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š


๋“ฑ์„ ์ฐธ๊ณ ํ•˜์—ฌ..

[์˜ˆ์‹œ] (ํ…Œ์ŠคํŠธ ํ•ด ๋ณด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š)

name: Open Swagger-doc-updating PR

on: 
  push:
    branches:
      - main
    paths:
      - 'src/core/**/**.go'
      - 'src/api/rest/server/**/**.go'

jobs:
  # The job key is "update-swagger-doc"
  update-swagger-doc:
    # Job name is "Update Swagger doc"
    name: Update Swagger doc

    # This job runs on Ubuntu-latest
    runs-on: ubuntu-18.04
    strategy:
      matrix:
        go-version: [ '1.17' ]

    steps:
      - name: Set up Go ${{ matrix.go-version }}
        uses: actions/setup-go@v2
        with:
          go-version: ${{ matrix.go-version }}

      - name: Checkout source code
        uses: actions/[email protected]

      - name: Install swag
        run: |
          go install github.com/swaggo/swag/cmd/swag@latest

      - name: Update Swagger doc
        run: |
          cd src
          make swag

      - name: Create Pull Request
        id: create-pull-request
        uses: peter-evans/create-pull-request@v3
        with:
          token: ${{ secrets.UPDATE_SWAGGER_DOC_PAT }}
          commit-message: Update Swagger REST API doc
          committer: cb-bot <[email protected]>
          author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
          signoff: false
          branch: update-swagger-doc
          base: main
          delete-branch: true
          title: '[Workflow] Update Swagger REST API doc'
          body: |
            Update Swagger REST API doc
            - Updated with *today's* date
            - Auto-generated by [create-pull-request][1]
            [1]: https://github.com/peter-evans/create-pull-request
          labels: |
            swagger
            automated pr
          assignees: cloud-barista/cb-tumblebug-maintainer
          reviewers: cloud-barista/cb-tumblebug-maintainer
          team-reviewers: |
            owners
            maintainers
          draft: false

      - name: Check outputs
        run: |
          echo "Pull Request Number - ${{ steps.create-pull-request.outputs.pull-request-number }}"
          echo "Pull Request URL - ${{ steps.create-pull-request.outputs.pull-request-url }}"

      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
        run: echo "$GITHUB_CONTEXT"

      - name: Dump job context
        env:
          JOB_CONTEXT: ${{ toJson(job) }}
        run: echo "$JOB_CONTEXT"

      - name: Dump steps context
        env:
          STEPS_CONTEXT: ${{ toJson(steps) }}
        run: echo "$STEPS_CONTEXT"

      - name: Dump runner context
        env:
          RUNNER_CONTEXT: ${{ toJson(runner) }}
        run: echo "$RUNNER_CONTEXT"

      - name: Dump strategy context
        env:
          STRATEGY_CONTEXT: ${{ toJson(strategy) }}
        run: echo "$STRATEGY_CONTEXT"

      - name: Dump matrix context
        env:
          MATRIX_CONTEXT: ${{ toJson(matrix) }}
        run: echo "$MATRIX_CONTEXT"

@computerphilosopher

Forked repository์—์„œ workflow๋ฅผ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์‹ค๋•Œ ํ•„์š”ํ•œ ๋ช‡๊ฐ€์ง€ ์ •๋ณด(์ œ๊ฐ€ ์ด์ „์— ์‚ฝ์งˆ ํ–ˆ๋˜... ใ… )๋ฅผ ๊ณต์œ  ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

  1. Actions ์‹คํ–‰์„ ์œ„ํ•œ ๊ถŒํ•œ ์„ค์ • - Managing GitHub Actions settings for a repository
  2. Secret๊ณผ Personal Access Token (PAT)์— ๋Œ€ํ•œ ๊ฐ„๋‹จ ์„ค๋ช… - About GitHub secrets and personal access tokens

PAT ์„ค์ •์‹œ ์ฒดํฌํ•ด์•ผํ•˜๋Š” ํ•ญ๋ชฉ์ด ์žˆ์—ˆ๋˜๊ฒƒ ๊ฐ™์€๋ฐ์š”. ์ถ”ํ›„์— ๊ณต์œ  ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค~

@computerphilosopher ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!! ๐Ÿ‘

ํ•˜์‹œ๋ฉด์„œ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”~! (์ฐธ๊ณ ๋กœ ์ž‘์„ฑํ•œ workflow์˜ ํ…Œ์ŠคํŠธ๋Š” 1์ฐจ์ ์œผ๋กœ๋Š” ๋ณธ์ธ์˜ forked repository์—์„œ ๋Œ๋ ค๋ณด์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ์ด์Šˆ๋กœ upstream์—์„œ ๋ฐ”๋กœ ๊ตฌ๋™์‹œํ‚ฌ ์ˆ˜๋Š” ์—†์„ ๊ฑฐ์˜ˆ์š”.)

@jihoon-seo ๋‹˜~ ํ˜น์‹œ @computerphilosopher ๊ธฐ์—ฌ์ž๊ป˜์„œ ์ฐธ๊ณ ํ•˜์‹ค๋งŒํ•œ reference๊ฐ€ ์žˆ์„๊นŒ์š”? ^^ ๋Œ€๋žต ๊ธฐ์–ต๋‚˜์‹œ๋Š” ๊ฒƒ์ด ์žˆ์œผ์‹œ๋ฉด ๊ณต์œ ํ•ด์ฃผ์„ธ์š”~~

@jihoon-seo

ํ˜„์žฌ ์ด์Šˆ ๊ฒ€ํ† ์ค‘์ž…๋‹ˆ๋‹ค.

์ œ์‹œํ•˜์‹  ํŒŒ์ผ์—์„œ๋Š” make swag ๋ช…๋ น์–ด ์ ์šฉ ํ›„ ์ž๋™์œผ๋กœ Pull request๋ฅผ ์—ฌ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š”๋ฐ, ์ž๋™ํ™”๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด๋ผ PR๋ณด๋‹ค๋Š” ์ปค๋ฐ‹์„ ๋ฐ”๋กœ ํ•˜๋Š” ํŽธ์ด ๋‚ซ์ง€ ์•Š์„๊นŒ์š”?

๋‹ค์Œ์€ ์˜ˆ์‹œ action์ž…๋‹ˆ๋‹ค.

https://github.com/marketplace/actions/git-auto-commit

https://github.com/marketplace/actions/add-commit

@computerphilosopher
์ด๋ชจ์ง€๋กœ ์•Œ๋žŒ ํ™•์ธ์„ ๋ชปํ•˜์…จ์„ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ.. ^^

์ €๋Š” ๋ฐ”๋กœ ์—…์ŠคํŠธ๋ฆผ์— ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š”
PR์ด ์˜คํ”ˆ๋˜๋ฉด, ํ˜น์‹œ๋ผ๋„ ๋ชจ๋ฅผ ๋ฌธ์ œ(swagger api์˜ ์˜ค๋ฅ˜, ๋‹ค๋ฅธ PR๋“ค๊ณผ ์ปค๋ฐ‹ ์ถฉ๋Œ ๋“ฑ๋“ฑ)๋ฅผ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์–ด์„œ,

PR์œผ๋กœ ์—ฌ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.. ^^
API ๋ณ€๊ฒฝ์— ์˜ํ•ด์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋„ ํ•œ ๋ฒˆ ํ™•์ธํ•  ๊ฒธ ๋ง์ด์ฃ .

ํ•˜์ง€๋งŒ, ๋ง์”€ํ•˜์‹  ๊ฒƒ๊ณผ ๊ฐ™์ด, PR์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋‹ด๋„ ์žˆ๊ธด ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์žˆ๋„ค์š”.
@jihoon-seo @hermitkim1 ๊ป˜์„œ๋„ ๋™์˜ํ•˜์‹œ๋Š” ๋“ฏํ•˜๋‹ˆ ~~

์ œ์•ˆํ•ด์ฃผ์‹  ๋ฐฉ๋ฒ•์œผ๋กœ ๊ธฐ์—ฌ๋ฅผ ํ•ด์ฃผ์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค..!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jihoon-seo picture jihoon-seo  ยท  4Comments

jihoon-seo picture jihoon-seo  ยท  4Comments

jihoon-seo picture jihoon-seo  ยท  3Comments

seokho-son picture seokho-son  ยท  5Comments

seokho-son picture seokho-son  ยท  5Comments