Kategorien
Entwicklung Webapplikationen

GitHub Makefile Workflow – Teil 2

Vor einigen Wochen haben wir zu dem Thema Makefile und GitHub Workflow / Actions schon einmal einen Beitrag geschrieben. In diesem Beitrag wollen wir Ihnen zeigen, wie Sie Assets zu Ihren Releases automatisiert bauen und anhängen können.

Zuersteinmal möchte ich Ihnen die von uns erstellte Konfiguration für die GitHub Action zeigen. Diese finden Sie einmal hier:

name: Assets

on:
  release:
    types:
      - created

jobs:
  build:

    runs-on: ubuntu-latest

    steps:

      - name: Clone repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Set up Go
        uses: actions/setup-go@v3
        with:
          go-version: 1.19

      - name: Cross compile the binary
        run: make cross-compile

      - name: Upload Linux binary
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ github.token }}
        with:
          upload_url: ${{ github.event.release.upload_url }}
          asset_path: build/cross-compile/compver-amd64-linux
          asset_name: compver-amd64-linux
          asset_content_type: application/x-binary

      - name: Upload Darwin binary
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ github.token }}
        with:
          upload_url: ${{ github.event.release.upload_url }}
          asset_path: build/cross-compile/compver-amd64-darwin
          asset_name: compver-amd64-darwin
          asset_content_type: application/x-binary

      - name: Upload Windows binary
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ github.token }}
        with:
          upload_url: ${{ github.event.release.upload_url }}
          asset_path: build/cross-compile/compver-amd64-windows.exe
          asset_name: compver-amd64-windows.exe
          asset_content_type: application/x-binary

Generell ist dieser Workflow recht einfach strukturiert. In den Steps wird ein Klone vom Repository erstellt. Danach erstellen wir im nächsten Step, das Setup für Golang 1.19. Im nächsten Step erstellen wir die verschiedenen Binaries mithilfe eines Makefiles. Hier finden Sie einmal den Teil des Makefiles, der die Bineries generiert:

# Here you can reformat, check or build the binary.
BINARY_NAME=compver
GIT_TAG=$(shell git describe --tags --abbrev=0)
VERSION=$(if $(GIT_TAG),$(GIT_TAG),unavailible)
LDFLAGS=-ldflags "-X 'github.com/gowizzard/${BINARY_NAME}/v4/build_information.Version=${VERSION}'"

cross-compile:
	GOOS=windows GOARCH=amd64 go build ${LDFLAGS} -o build/cross-compile/${BINARY_NAME}-amd64-windows.exe
	GOOS=linux GOARCH=amd64 go build ${LDFLAGS} -o build/cross-compile/${BINARY_NAME}-amd64-linux
	GOOS=darwin GOARCH=amd64 go build ${LDFLAGS} -o build/cross-compile/${BINARY_NAME}-amd64-darwin

Nachdem in der GitHub Action die verschiedenen Binaries erstellt wurden, werden diese in den nächsten und letzten drei Steps an das dazugehörige Release angehangen. Prinzipiell wird der Workflow nur ausgeführt, wenn ein neues Release erstellt wurde.

Somit können wir für zum Beispiel ein CLI Tool nie wieder bei einem neuen Release vergessen die Binaries zu dem Release hochzuladen.

Von Jonas Kwiedor

Full- Stack Developer aus Hamburg. Liebt es sich mit Schnittstellen & Automationen auseinander zu setzen und sich mit der Programmiersprache GO Lang zu beschäftigen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.