build-scripts/gitlab/GoBuild.yml

72 lines
2.3 KiB
YAML

.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