Giithub Action에서 다른 창고로부터 변경 통지를 받고 PR Workflow 작성

15707 단어 GitHubCItech

하고 싶은 일

  • 창고A가 창고B에게 npm package
  • 가 공개되었음을 알리고자 함
    창고 B가 통지를 받은 후 패키지.제이슨 업데이트 PR 만들고 싶어개인 창고 의존이라면 이 수요가 적을 수 있지만 회사 내부에서 창고를 분할하면 업데이트 누락이 발생할 수 있다.나는 그것을 기계적으로 방지하고 싶다.하지만 수동으로 합병하기 싫어서 PR이 제작될 때까지.이 정도의 온도감을 실현하고 싶다.
    또한 창고 B는 창고 A의 통지에 의존하지 않고 이 임무를 수동으로 수행할 수 있기를 희망한다.
    (스포일러 후 수동 미션을 수행한 후 창고 간 통지를 수행했다.)
    (주로 구성요소와 레시피 소개로 코드 자체는 이동하는 코드부터 잘라 붙여넣기 때문에 그대로 움직이지 않을 수 있습니다. 이후 확인이 필요함)

    설치 방법


    GiitHub Actions의 Trigger로서 Workflow Dispatch와 Repository Dispatch가 있습니다.Workflow Dispatch는 Actions 관리 화면에서 수동으로 실행되며, Repository Dispatch는 GiitHub API로부터 알림 실행 트리거를 받습니다.
  • Workflow Dispatch · Actions · GitHub Marketplace
  • Repository Dispatch · Actions · GitHub Marketplace
  • 둘 다 매개 변수를 얻을 수 있다.Workflow Dispatch의 경우 관리 화면에서 입력할 수 있고, Repositry Dispatch의 경우 clientpaylad의 매개 변수로 드릴게요.

    통지 패키지.json측workflow 업데이트


    .github/workflows/update-packages.yaml
    name: Update Packages
    on:
      repository_dispatch:
        types: [update-packages] # with client_payload.packages
      workflow_dispatch:
        inputs:
          packages:
            description: ''
            required: true
            default: ''
    jobs:
      update-packages:
        runs-on: ubuntu-latest
        steps:
          - name: checkout
            uses: actions/checkout@v2
          - name: setup Node
            uses: actions/setup-node@v1
          - name: Install
            run: npm install
          - Update packages by workflow_dispatch
            if: ${{ github.event.inputs.packages != null }}
            run: npm update ${{ github.event.inputs.packages }}
          - Update packages by repository_dispatch
            if: ${{ github.event.client_payload.packages != null }}
            run: npm update ${{ github.event.client_payload.packages }}
          - name: Create Pull Request
            id: cpr
            uses: peter-evans/create-pull-request@v3
            with:
              token: ${{ secrets.GITHUB_TOKEN }}
              commit-message: 'Update packages'
              committer: GitHub <[email protected]>
              author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
              signoff: false
              branch: feature/update-package
              branch-suffix: timestamp
              delete-branch: true
              title: 'Update Packages by CI'
              body: |
                @${{ github.actor }}
                ```
                ${{ github.event.inputs.packages }}
    	    ${{ github.event.client_payload.packages }}
                ```
          - name: Check Pull Request
            run: |
              echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
              echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
    

    알림자의workflow

    .github/workflows/publish-and-notify.yamlGiithub Private Token을 발행하고 ↑에서 정의한 Repository를 대상으로 아래의 curl을 클릭하면 업데이트할 수 있습니다.
    개인 액세스 토큰 사용
    회신 권한이 필요합니다.
    curl  -v  -H "Authorization: token <GITHUB_PRIVATE_TOKEN>" -H "Accept: application/vnd.github.everest-preview+json" "https://api.github.com/repos/<name>/<repo>/dispatches" -d '{"event_type": "update-packages", "client_payload": {"packages": "[email protected]"}}'
    
    이거 보고해.dispatch를 진행하려는merge trigger에서 repostitory dispatch를 실행합니다.
    주의사항: 시크릿.GITHUB_TOKIO 권한이 부족합니다.디스패치를 트리거할 수 없습니다.토큰을 발행해야 한다.
    이번엔 github package registry에서publish로 하고 있어요.npm 영패가 필요 없는 것은 회사 내부의 창고 간의 일이다.npm에 대해publish를 진행하려면 npm의token이 필요합니다.
    Publish to npm · Actions · GitHub Marketplace
    name: publish-and-dispatch
    on:
      push:
        branches:
          - master
    jobs:
      release:
        name: Setup
        runs-on: ubuntu-latest
        steps:
          - name: checkout
            uses: actions/checkout@v2
          - name: setup Node
            uses: actions/setup-node@v1
            with:
              registry-url: "https://npm.pkg.github.com"
          - name: install
            run: npm install
          - name: build
            run: npm run build
          - name: publish
            run: |
              npx can-npm-publish --verbose && npm publish || echo "Does not publish"
            env:
              NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          - name: package-version-to-git-tag
            uses: pkgdeps/action-package-version-to-git-tag@v1
            with:
              github_token: ${{ secrets.GITHUB_TOKEN }}
              github_repo: ${{ github.repository }}
              git_commit_sha: ${{ github.sha }}
              git_tag_prefix: "v"
          - name: dispatch update-packages
            uses: peter-evans/repository-dispatch@v1
            with:
              repository: github_name/repo
              token: ${{ secrets.GITHUB_PERSONAL_TOKEN }}
              event-type: update-pkgs
    
    시크릿에서 GITHUBPERSONAL_TOEN이 설정되어 있음을 전제로 합니다.대상은 자기가 아니라 대상이다
    게으름을 많이 피웠어요. 사실 바뀔 때만 퍼블릭을 하고 싶은데, 별거 아니에요..

    좋은 웹페이지 즐겨찾기