Ćwiczenie — korzystanie z akcji GitHub Script w funkcji GitHub Actions

Ukończone

W tej lekcji dowiesz się więcej na temat sposobu używania skryptu usługi GitHub do ulepszania przepływu pracy.

Dodawanie problemów do tablicy projektu

Oprócz używania biblioteki octokit/rest.js do tworzenia komentarzy i otwierania żądań ściągnięcia można również użyć biblioteki octokit/rest.js do zarządzania projektami GitHub. W poniższym przykładzie kodu utworzysz przepływ pracy uruchamiany za każdym razem, gdy każda osoba doda nowy problem do repozytorium. Spowoduje to dodanie problemu do tablicy projektu, co ułatwia klasyfikację pracy.

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

Pierwsza sekcja tego przepływu pracy tworzy komentarz za każdym razem, gdy zostanie utworzony nowy problem, który omówiliśmy w poprzedniej lekcji. W następnej sekcji zostanie utworzona karta oparta na tym problemie i doda ją do tablicy projektu.

Rozdziel przepływ pracy na kroki

Jedną z zalet korzystania z akcji jest możliwość oddzielenia zadań od mniejszych jednostek pracy nazywanych krokami. W poprzednim przykładowym przepływie pracy można podzielić przepływ pracy na dwa kroki.

Jedną z zalet podziału bieżącego przepływu pracy na wiele kroków jest możliwość używania wyrażeń do stosowania logiki. Wykonanie kroków umożliwia tworzenie reguł wokół tego, kiedy kroki mogą być uruchamiane i mogą pomóc w optymalizacji przebiegu przepływu pracy.

Aby oddzielić przykładowy przepływ pracy do kroków:

  • Nazwij każdy krok, aby można było go śledzić na karcie Akcje.
  • Użyj wyrażeń, aby określić, czy krok powinien zostać wykonany (opcjonalnie).

W tym przykładzie dwa zadania w oryginalnym pliku przepływu pracy zostały rozdzielone na poszczególne kroki.

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

Każdy krok zawiera opisowy name element, który pomaga również śledzić go na karcie Akcje.

Krok Add issue to project board zawiera również instrukcję określającą if problem powinien zostać dodany tylko do tablicy projektu, jeśli ma ona etykietę bug.

Korzystanie ze środowiska Node.js

Skrypt Usługi GitHub zapewnia również dostęp do pełnego środowiska Node.js. Chociaż skrypt Usługi GitHub nie jest zalecany do pisania logiki dla złożonych akcji, możesz użyć go, aby dodać więcej funkcji do interfejsu API octo/rest.js.

Przykładem może być użycie narzędzia Node.js do wyświetlenia przewodnika współtworzenia przy każdym otwarciu problemu. System plików Node.js służy do odczytywania pliku i używania go jako treści komentarza problemu. Aby uzyskać dostęp do plików w repozytorium, dołącz actions/checkout akcję jako pierwszy krok w przepływie pracy.

Poniższy przykład wprowadza następujące zmiany w pliku przepływu pracy:

  • action/checkout Dodaje akcję w celu odczytania pliku odpowiedzi szablonu znajdującego się w lokalizacji.github/ISSUE_COMMENT/comment.md
  • Dodaje kod JavaScript do użycia modułu Node.js File System w celu umieszczenia zawartości naszej szablonowej odpowiedzi jako treści komentarza problemu
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"
            });

Skrypt Usługi GitHub pomógł utworzyć kompleksową odpowiedź na otwarty nowy problem. Ta odpowiedź jest również oparta na szablonie w repozytorium, więc można łatwo zmienić ją w przyszłości. Na koniec dołączono również wyzwalacz w celu dodania problemu do tablicy projektu, aby można było łatwo sklasyfikować go na potrzeby przyszłej pracy.