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.