Øvelse – Bruke GitHub-skript i GitHub-handlinger

Fullført

I denne enheten vil du lære mer om hvordan du kan bruke GitHub-skript til å forbedre arbeidsflyten.

Legge til problemer i en prosjekttavle

I tillegg til å bruke octokit/rest.js til å opprette kommentarer og åpne pull-forespørsler, kan du også bruke octokit/rest.js til å administrere GitHub-prosjekter. I det følgende kodeeksempelet oppretter du en arbeidsflyt som kjører når noen legger til et nytt problem i repositoriet. Dette legger til problemet i en prosjekttavle, noe som gjør det enklere for deg å triage arbeidet ditt.

name: Learning GitHub Script
on:
  issues:
    types: [opened]
jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/github-script@0.8.0
      with:
        github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
        script: |
            github.issues.createComment({
            issue_number: context.issue.number,
            owner: context.repo.owner,
            repo: context.repo.repo,
            body: "🎉 You've created this issue comment using GitHub Script!!!"
            })
            github.projects.createCard({
            column_id: {{columnID}},
            content_id: context.payload.issue.id,
            content_type: "Issue"
            });

Den første delen av arbeidsflyten oppretter en kommentar når et nytt problem opprettes, som dekkes i den forrige enheten. Den neste delen oppretter et kort basert på dette problemet og legger det til i prosjekttavlen.

Separer arbeidsflyt i trinn

En fordel med å bruke handlinger er at du kan skille jobber i mindre arbeidsenheter kalt trinn. I den foregående eksempelarbeidsflyten kan du dele arbeidsflyten i to trinn.

En fordel med å bryte gjeldende arbeidsflyt i flere trinn er at den gjør det mulig å bruke uttrykk til å bruke logikk. Ved hjelp av fremgangsmåten kan du opprette regler rundt når trinn er tillatt å kjøre og kan bidra til å optimalisere arbeidsflytkjøringen.

Slik skiller du eksempelarbeidsflyten i trinn:

  • Gi hvert trinn navn, slik at du kan spore det fra Handlinger-fanen.
  • Bruk uttrykk til å avgjøre om et trinn skal kjøres (valgfritt).

I dette eksemplet er de to oppgavene i den opprinnelige arbeidsflytfilen atskilt i individuelle trinn:

name: Learning GitHub Script
on:
  issues:
    types: [opened]
jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
    - name: Comment on new issue
      uses: actions/github-script@0.8.0
      with:
        github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
        script: |
            github.issues.createComment({
            issue_number: context.issue.number,
            owner: context.repo.owner,
            repo: context.repo.repo,
            body: "🎉 You've created this issue comment using GitHub Script!!!"
            })
    - name: Add issue to project board
      if: contains(github.event.issue.labels.*.name, 'bug')
      uses: actions/github-script@0.8.0
      with:
        github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
        script: |
            github.projects.createCard({
            column_id: {{columnID}},
            content_id: context.payload.issue.id,
            content_type: "Issue"
            });

Hvert trinn inneholder et beskrivende name element som også hjelper deg med å spore det fra Handlinger-fanen .

Trinnet Add issue to project board inneholder også en if setning som angir at problemet bare skal legges til prosjekttavlen hvis den er merket bug.

Bruk Node.js miljøet

GitHub Script gir deg også tilgang til et fullt Node.js miljø. Selv om vi ikke anbefaler å bruke GitHub-skript til å skrive logikken for komplekse handlinger, kan du bruke det til å legge til flere funksjoner i okta/rest.js API-en.

Du kan for eksempel bruke Node.js til å vise en bidragsveiledning når et problem åpnes. Du kan bruke Node.js filsystem til å lese en fil og bruke den som brødtekst i kommentarproblemet. Hvis du vil ha tilgang til filer i repositoriet, kan du inkludere actions/checkout handling som det første trinnet i arbeidsflyten.

Følgende eksempel gjør følgende endringer i arbeidsflytfilen:

  • action/checkout Legger til handlingen for å lese den malerte svarfilen som er plassert på.github/ISSUE_RESPONSES/comment.md
  • Legger til JavaScript for å bruke Node.js File System-modulen til å plassere innholdet i det malerte svaret som brødteksten i problemkommentaren
name: Learning GitHub Script
on:
  issues:
    types: [opened]
jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Comment on new issue
        uses: actions/github-script@0.8.0
        with:
          github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
          script: |
             const fs = require('fs')
             const issueBody = fs.readFileSync(".github/ISSUE_RESPONSES/comment.md", "utf8")
             github.issues.createComment({
             issue_number: context.issue.number,
             owner: context.repo.owner,
             repo: context.repo.repo,
             body: issueBody
             })
      - name: Add issue to project board
        if: contains(github.event.issue.labels.*.name, 'bug')
        uses: actions/github-script@0.8.0
        with:
          github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
          script: |
            github.projects.createCard({
            column_id: {{columnID}},
            content_id: context.payload.issue.id,
            content_type: "Issue"
            });

GitHub Script hjalp deg med å opprette et omfattende svar på et nytt problem. Dette svaret er også basert på en mal i repositoriet, så det er enkelt å endre. Til slutt inkluderte du også en utløser for å legge til problemet i prosjekttavlen, slik at du enkelt kan triage den for fremtidig arbeid.