Chciałbym skonfigurować mój przepływ pracy, aby wykonać następujące czynności:

  • Na każdym wydarzeniu (żądanie pull, naciśnij dowolne gałęzie)
    • kod kasowy
    • projekt budowy
    • Testy biegów
    • prześlij artefakty dla innych zadań
  • Tylko wtedy, gdy master jest pchany
    • pobierz artefakty z poprzedniej pracy
    • pushf-stron
  • Tylko wtedy, gdy znacznik jest pchany
    • pobierz artefakty z poprzedniej pracy
    • Utwórz wydanie
    • prześlij artefakty do wydania

W moim .github/workflows Dyrektywy {{X1} stosuje się do wszystkich zadań, więc nie będzie działać w moim przypadku. Z drugiej strony, działa tylko {{x2} w tym samym przepływie pracy.

Jaki jest właściwy sposób na osiągnięcie opisanego przepływu pracy?

on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v1
        with:
          submodules: true
      - name: Build
        run: make all
      - uses: actions/upload-artifact@v2
        with:
          name: build
          path: dist/
      - name: Deploy to GitHub Pages
        filters: # <-----<<<< What I would like to do
          branch: master                
        uses: JamesIves/github-pages-deploy-action@3.5.9
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN  }}
          BRANCH: gh-pages
          FOLDER: dist/html
6
nowox 2 sierpień 2020, 22:35

1 odpowiedź

Najlepsza odpowiedź

Możesz dodać warunki do swoich kroków i po prostu pomiń części, które nie są potrzebne, patrz {X0}}. Jeśli chodzę, github kontekst jest goldmine różnych danych związanych z aktualnie uruchomionym przepływem pracy. Na przykład

github.event_name  string  The name of the event that triggered the workflow run.
github.ref         string  The branch or tag ref that triggered the workflow run.
github.head_ref    string  The head_ref or source branch of the pull request in a workflow run.

I tak dalej.

Wystarczy pamiętać, że części wspomniane w dokumentacji są tylko wierzchołkiem lodowej; github.event zawiera ścianę użytecznych rzeczy. Najlepiej Spójrz w niektórych testowych przepływu pracy i zobacz, co zapewnia każde wydarzenie.


Coś takiego powinno działać:

- name: On any event (pull-request, push on any branches) 
  uses: some/action
- name: Only when master is pushed
  if:   github.event_name == 'push' && github.ref == 'refs/heads/master'
  uses: some/action
- name: Only when a tag is pushed 
  if:   github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
  uses: some/action
5
Samira 2 sierpień 2020, 20:29