blog.kuepper.nrw

Github workflow trigger in other repository

Rüdiger Küpper GitHubActionWorkflowTriggerInternet

English Version

Github Actions

Eine Github Action in einem anderem Repository triggern

Im ersten Repository wird ein Workflow trigger_on_push.yaml erstellt, der in einem anderen Repo einen Worklow trigger_prod.yaml triggert. Dieser kann sogar in einem anderen GitHub Account liegen. Man benötigt nur einen gültigen Token.

Aber wieso über eine dazwischen geschaltete Action? Ganz einfach, das 2. Repository bekommt keine Pushes, ausser es würde sich etwas in diesem Repository ändern. Da aber die Änderungen nur im 1. Repository gemacht werden und das zweite nur die Software für das Generieren der Page und der Docker Images enthält, wird sich da nichts ändern. Also kann Semantic Release auch keine Version hochzählen.

Daher die Trigger Action im 2. Repo. Die ändert nur eine Datei im Repo und pushed es in sich selbst. Danach Triggert sie die eigentliche Build Action main.yaml. Damit ist eine Änderung vorhanden und Semantic Release findet Commits, die dann in dieses Release mit rein kommen.

Repo 1 Workflow trigger_on_push.yaml:

name: Build Develop

on:
    push:
        branches:
            - develop

jobs:
    trigger-workflow:
        runs-on: ubuntu-latest
        steps:
            - name: Trigger build Repo
              uses: convictional/trigger-workflow-and-wait@v1.6.1
              with:
                owner: ruedigerp
                repo: ink-blog
                github_token: ${{ secrets.GH_TOKEN }}
                workflow_file_name: trigger_prod.yaml 
                ref: develop 
                wait_interval: 10 
                propagate_failure: true 
                trigger_workflow: true
                wait_workflow: true

Im 2. Repo trigger_prod.yaml

name: Trigger Build Prod

on:
  workflow_dispatch:
    inputs:
        workflow_02:
            description: 'ًWorkflow 2 which will be triggered'
            required: true
            default: 'trigger-workflow'

        workflow2_github_account:
            description: 'GitHub Account Owner'
            required: true
            default: 'youraccount'

        workflow2_repo_github:
            description: 'repo-name'
            required: true
            ref: main
            default: 'repo1'


jobs:
  trigger-build: 
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: add Trigger page
        run: |
          ls -la 
          echo "build $(date)" > buildit.txt
          ls -la
          git remote -v
          export GH_TOKEN="${{ secrets.DOCKHUB_TOKEN }}"
          git config --global user.email "your@main.com"
          git config --global user.name "Your Name"
          git add .
          git commit -m "fix: new build $(date)"
          git push

  trigger-workflow:
    runs-on: ubuntu-latest
    steps:
        - name: Trigger build Repo
          uses: convictional/trigger-workflow-and-wait@v1.6.1
          with:
            owner: ruedigerp
            repo: repo2
            github_token: ${{ secrets.DOCKERHUB_TOKEN }}
            workflow_file_name: main.yaml 
            ref: main 
            wait_interval: 10 
            propagate_failure: true 
            trigger_workflow: true
            wait_workflow: true   

Die main.yaml in Repo2:

name: Build Prod

on:
  push:
    branches:
      - 'main'
  workflow_dispatch:
    inputs:
        workflow_02:
            description: 'ًWorkflow 2 which will be triggered'
            required: true
            default: 'trigger-workflow'

        workflow2_github_account:
            description: 'GitHub Account Owner'
            required: true
            default: 'youraccount'

        workflow2_repo_github:
            description: 'repo-name'
            required: true
            default: 'repo2'

env:
  IMAGE_NAME: ghcr.io/youraccount/imagename
  DOCKERFILE: Dockerfile

jobs:
  prepare:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: Create Sematic Release Version
        env:
          GITHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
        run: |
          export HOME=/tmp
          git config --global user.email "your@main.com"
          git config --global user.name "youraccount"
          git config --global credential.helper cache
          npx semantic-release

  build-amd64:
    needs: [ prepare ]
    runs-on: ubuntu-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: "ghcr.io"
          username: ${{ secrets.GH_USERNAME }}
          password: ${{ secrets.GH_TOKEN }}

      - name: Build and push AMD64 image
        run: |
          # ...
          # build stuff 
          # ...
          docker build -f ${{ env.DOCKERFILE }} --build-arg GOOS=linux --build-arg GOARCH=amd64 --build-arg NEXT_VERSION="$VERSION" --build-arg BUILD_TIMESTAMP="$BUILD_TIMESTAMP" --build-arg GIT_BRANCH="$GIT_BRANCH" --build-arg COMMIT_HASH="$COMMIT_HASH" -t ${{ env.IMAGE_NAME }}:$VERSION-amd64 -t ${{ env.IMAGE_NAME }}:latest-amd64 .
          docker push ${{ env.IMAGE_NAME }}:$VERSION-amd64          
          # ... 

  merge-images: 
     # ... 
  other-cool-stuff: 
     # ... 
Rüdiger Küpper
DevOps Engineer & CISO @ Mogenius