Övning – använda GitHub Script i GitHub Actions-åtgärder

Slutförd

I den här lektionen får du lära dig mer om hur du kan använda GitHub-skriptet för att förbättra arbetsflödet.

Lägga till problem i en projekttavla

Förutom att använda octokit/rest.js för att skapa kommentarer och öppna pull-begäranden kan du också använda octokit/rest.js för att hantera GitHub Projects. I kodexemplet nedan skapar du ett arbetsflöde som körs när någon lägger till ett nytt problem på lagringsplatsen. Detta lägger till problemet i en projekttavla, vilket gör det enklare för dig att sortera ditt arbete.

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"
            });

Det första avsnittet i det här arbetsflödet skapar en kommentar när ett nytt problem skapas, som vi gick igenom i föregående lektion. Nästa avsnitt skapar ett kort baserat på det här problemet och lägger till det i projekttavlan.

Avgränsa arbetsflödet i steg

En fördel med att använda åtgärder är att du kan dela upp jobb i mindre arbetsenheter som kallas steg. I föregående exempelarbetsflöde kan du dela upp arbetsflödet i två steg.

En fördel med att dela upp det aktuella arbetsflödet i flera steg är att du kan använda uttryck för att tillämpa logik. Med hjälp av steg kan du skapa regler runt när steg tillåts köras och kan hjälpa dig att optimera arbetsflödeskörningen.

Så här separerar du exempelarbetsflödet i steg:

  • Namnge varje steg så att du kan spåra det från fliken Åtgärder.
  • Använd uttryck för att avgöra om ett steg ska köras (valfritt).

I det här exemplet har de två uppgifterna i den ursprungliga arbetsflödesfilen delats upp i enskilda steg.

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"
            });

Varje steg innehåller ett beskrivande name element som också hjälper dig att spåra det från fliken Åtgärder.

Steget Add issue to project board innehåller också en if -instruktion som anger att problemet endast ska läggas till i projekttavlan om det är märkt bug.

Använda Node.js-miljön

GitHub-skriptet ger dig också åtkomst till en fullständig Node.js miljö. GitHub-skriptet rekommenderas inte för att skriva logiken för komplexa åtgärder, men du kan använda den för att lägga till fler funktioner i octo/rest.js-API:et.

Ett exempel är att använda Node.js för att visa en bidragsguide när ett problem öppnas. Du kan använda Node.js-filsystemet för att läsa en fil och använda den som brödtext i ärendekommentatorn. Om du vill komma åt filer i lagringsplatsen ska du inkludera åtgärden actions/checkout som det första steget i arbetsflödet.

Exemplet nedan gör följande ändringar i arbetsflödesfilen:

  • Lägger till åtgärden action/checkout för att läsa den mallade svarsfilen som finns på .github/ISSUE_COMMENT/comment.md
  • Lägger till JavaScript för att använda modulen Node.js File System för att placera innehållet i vårt mallade svar som brödtext i ärendekommentaren
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-skriptet hjälpte dig att skapa ett omfattande svar på ett nytt problem som öppnas. Det här svaret baseras också på en mall på lagringsplatsen, så det är enkelt att ändra i framtiden. Slutligen inkluderade du även en utlösare för att lägga till problemet i projekttavlan så att du enkelt kan sortera det för framtida arbete.