Separate GHA build and package steps #89
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
env: | |
PACKAGE_NAME: promtail | |
PACKAGE_VERSION: v2.9.3 | |
APT_DEPENDENCIES: "git build-essential libsystemd-dev gccgo-aarch64-linux-gnu gccgo-arm-linux-gnueabi" | |
name: Build, package and publish | |
"on": | |
push: | |
paths-ignore: | |
- "*.md" | |
- LICENSE | |
- .github/renovate.json | |
- .gitignore | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
jobs: | |
build: | |
name: Build & Package | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
goarch: | |
- amd64 | |
- arm64 | |
- arm | |
fail-fast: true | |
container: debian:bookworm-slim | |
steps: | |
- name: Install build dependencies | |
run: apt-get update && apt-get install -y ${APT_DEPENDENCIES} | |
if: ${{ env.APT_DEPENDENCIES != '' }} | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 | |
with: | |
repository: grafana/loki.git | |
ref: ${{ env.PACKAGE_VERSION }} | |
- name: Set up Golang | |
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5 | |
with: | |
go-version: 1.21 | |
cache: false | |
- id: go-cache-paths | |
run: | | |
echo "::set-output name=go-build::$(go env GOCACHE)" | |
echo "::set-output name=go-mod::$(go env GOMODCACHE)" | |
- name: Golang cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
${{ steps.go-cache-paths.outputs.go-build }} | |
${{ steps.go-cache-paths.outputs.go-mod }} | |
key: ${{ runner.os }}-go-${{ matrix.goarch }}-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-go-${{ matrix.goarch }}- | |
- name: Build | |
run: | | |
case ${ARCH} in | |
amd64) | |
export CC=gcc;; | |
arm64) | |
export CC=aarch64-linux-gnu-gcc;; | |
arm) | |
export CC=arm-linux-gnueabi-gcc;; | |
esac | |
git config --global --add safe.directory '*' | |
export GIT_REVISION=$(git rev-parse --short HEAD) | |
echo $GIT_REVISION | |
export GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) | |
echo $GIT_BRANCH | |
export IMAGE_TAG=$(./tools/image-tag) | |
echo $IMAGE_TAG | |
export DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") | |
GOOS=linux GOARCH=${ARCH} go build -ldflags '-s -w -X ${VPREFIX}.Branch=${GIT_BRANCH} -X ${VPREFIX}.Version=${IMAGE_TAG} -X ${VPREFIX}.Revision=${GIT_REVISION} -X ${VPREFIX}.BuildUser=$(whoami)@$(hostname) -X ${VPREFIX}.BuildDate=${DATE}' -tags netgo -mod vendor --tags=promtail_journal_enabled -o dist/${PACKAGE_NAME}_linux_${ARCH} ./clients/cmd/promtail | |
env: | |
ARCH: ${{ matrix.goarch }} | |
VPREFIX: github.com/grafana/loki/pkg/util/build | |
CGO_ENABLED: 1 | |
GOARM: 6 | |
- name: Upload artifact | |
uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4 | |
with: | |
name: binary-${{ matrix.goarch }} | |
path: dist/${{ env.PACKAGE_NAME }}_linux_${{ matrix.goarch }} | |
build-package: | |
name: Build Deb Package | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
goarch: | |
- amd64 | |
- arm64 | |
- arm | |
fail-fast: true | |
needs: build | |
steps: | |
- name: Check out code | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- name: Download build artifact | |
uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4 | |
with: | |
name: binary-${{ matrix.goarch }} | |
- name: Package | |
run: | | |
case ${ARCH} in | |
amd64) | |
export DEB_ARCH=amd64;; | |
arm) | |
export DEB_ARCH=armhf;; | |
arm64) | |
export DEB_ARCH=aarch64;; | |
esac | |
ls -laht | |
bundle exec fpm -f \ | |
-s dir \ | |
-t deb \ | |
--license Apache \ | |
--deb-priority optional \ | |
--deb-systemd-enable \ | |
--deb-systemd-restart-after-upgrade \ | |
--deb-systemd-auto-start \ | |
--maintainer [email protected] \ | |
--vendor https://grafana.com/ \ | |
-n ${DEB_NAME} \ | |
--description "${APP_DESCRIPTION}" \ | |
--url ${APP_URL} \ | |
--prefix / \ | |
-a ${DEB_ARCH} \ | |
-v ${PACKAGE_VERSION}-$(printf "%04d" $GITHUB_RUN_NUMBER) \ | |
--before-install deb_scripts/before_install.sh \ | |
--before-upgrade deb_scripts/before_upgrade.sh \ | |
--after-remove deb_scripts/after_remove.sh \ | |
--deb-systemd deb_scripts/promtail.service \ | |
--config-files /etc/promtail/promtail.yml \ | |
promtail.yml=/etc/promtail/promtail.yml \ | |
promtail_linux_${ARCH}=/usr/bin/promtail | |
env: | |
DEB_NAME: ${{ env.PACKAGE_NAME }} | |
APP_DESCRIPTION: ${{ env.PACKAGE_DESCRIPTION }} | |
APP_URL: https://github.com/grafana/loki/blob/master/docs/clients/promtail/ | |
ARCH: ${{ matrix.goarch }} | |
PACKAGE_VERSION: ${{ env.PACKAGE_VERSION }} | |
- name: Upload build artifact | |
uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4 | |
with: | |
name: deb-package-${{ matrix.goarch }} | |
path: "*.deb" | |
publish: | |
name: Publish | |
runs-on: ubuntu-latest | |
if: github.event_name != 'pull_request' | |
needs: build-package | |
steps: | |
- name: Download deb artifact | |
uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4 | |
with: | |
pattern: deb-package-* | |
merge-multiple: true | |
- name: Upload to Apt repo | |
env: | |
APT_CREDENTIALS: ${{ secrets.APT_CREDENTIALS }} | |
APT_KEY_PASSPHRASE: ${{ secrets.APT_KEY_PASSPHRASE }} | |
run: | | |
echo $APT_CREDENTIALS > aptly-auth | |
find -type f -name "*.deb" -exec curl -f --netrc-file aptly-auth -XPOST -F file=@{} https://apttoo.growse.com/api/files/${PACKAGE_NAME} \; | |
export result=$(curl -f --netrc-file aptly-auth -X POST https://apttoo.growse.com/api/repos/defaultrepo/file/${PACKAGE_NAME}) | |
echo $result | |
export failed=$(echo $result | jq '.FailedFiles | length') | |
if [[ "$failed" != "0" ]]; then exit 1; fi | |
curl -f --netrc-file aptly-auth -X PUT -H"Content-type: application/json" --data '{"Signing":{"Passphrase":"'"$APT_KEY_PASSPHRASE"'","Batch":true}}' https://apttoo.growse.com/api/publish/:./stablish |