added generic go build

This commit is contained in:
David Hiendl 2022-10-05 18:10:34 +02:00
parent 25f8287734
commit a9717e8231
2 changed files with 106 additions and 0 deletions

71
gitlab/GoBuild.yml Normal file
View File

@ -0,0 +1,71 @@
.GoBuild:
image: golang:1.19-buster # don't use alpine because of musl libc
variables:
BINARY_NAME: "$CI_PROJECT_NAME"
BINARY_DIR: "$CI_PROJECT_DIR/dist"
EXTRA_GO_BUILD_ARGS: ""
EXTRA_LD_FLAGS: ""
LD_FLAGS: "-s -w"
USE_UPX: "true"
GO_VERSION_VARIABLE: "" # package.variable to set to CI_COMMIT_REF_NAME
GO_VERSION_INFO_VARIABLE: "" # package.variable to set to additional data about release
PACKAGE_COMMIT_ENABLE: "true"
PACKAGE_COMMIT_PREFIX: "commit-"
PACKAGE_REF_SLUG_ENABLE: "true"
RUN_BINARY: "false"
RUN_BINARY_WITH_ARGUMENTS: ""
before_script:
- apt update
- apt install -y curl upx-ucl
script:
# set a default for the BINARY_NAME to allow job to run in local gitlab-runner when testing
- if [[ ! -z "$BINARY_NAME" ]]; then BINARY_NAME="app"; fi
# prepare build args
- |
if [[ ! -z "GO_VERSION_VARIABLE" ]]; then
LD_FLAGS="$LD_FLAGS -X '$GO_VERSION_VARIABLE=$CI_COMMIT_REF_NAME'"
fi
if [[ ! -z "GO_VERSION_INFO_VARIABLE" ]]; then
LD_FLAGS="$LD_FLAGS -X '$GO_VERSION_INFO_VARIABLE=ref: $CI_COMMIT_REF_NAME commit: $CI_COMMIT_SHA'"
fi
# build
- go build -ldflags="$LD_FLAGS $EXTRA_LD_FLAGS" -o "$BINARY_DIR/$BINARY_NAME" $EXTRA_GO_BUILD_ARGS ./main.go
# run UPX to compress binary if enabled
- if [[ "$USE_UPX" == true ]]; then upx $BINARY_DIR/$BINARY_NAME; fi
# test run binary
- |
if [[ "$RUN_BINARY" == "true" ]]; then
$BINARY_DIR/$BINARY_NAME $RUN_BINARY_WITH_ARGUMENTS
RC=$?
fi
# publish package for commit
- |
if [[ "$PACKAGE_COMMIT_ENABLE" == "true" ]] && [[ ! -z "$CI_API_V4_URL" ]]; then
curl \
--header "JOB-TOKEN: $CI_JOB_TOKEN" \
--upload-file $BINARY_DIR/$BINARY_NAME \
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/$BINARY_NAME/$IMAGE_COMMIT_PREFIX-$CI_COMMIT_SHA/$BINARY_NAME"
fi
# publish package for commit ref slug
- |
if [[ "$PACKAGE_REF_SLUG_ENABLE" == "true" ]] && [[ ! -z "$CI_API_V4_URL" ]]; then
curl \
--header "JOB-TOKEN: $CI_JOB_TOKEN" \
--upload-file $BINARY_DIR/$BINARY_NAME \
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/$BINARY_NAME/$CI_COMMIT_REF_SLUG/$BINARY_NAME"
fi

View File

@ -73,4 +73,39 @@ helm-release:
# only:
# - tags
```
## Golang
Add to .gitlab-ci.yml
```yaml
include:
- remote: 'https://raw.githubusercontent.com/dhswt/build-scripts/master/gitlab/GoBuild.yml'
build:
extends: .GoBuild
# overwrite to change default variables below
# variables:
# BINARY_NAME: "$CI_PROJECT_NAME"
# BINARY_DIR: "$CI_PROJECT_DIR/dist"
#
# EXTRA_GO_BUILD_ARGS: ""
# EXTRA_LD_FLAGS: ""
# LD_FLAGS: "-s -w"
# USE_UPX: "true"
#
# GO_VERSION_VARIABLE: "" # package.variable to set to CI_COMMIT_REF_NAME
# GO_VERSION_INFO_VARIABLE: "" # package.variable to set to additional data about release
#
# PACKAGE_COMMIT_ENABLE: "true"
# PACKAGE_COMMIT_PREFIX: "commit-"
#
# PACKAGE_REF_SLUG_ENABLE: "true"
#
# RUN_BINARY: "false"
# RUN_BINARY_WITH_ARGUMENTS: ""
```