72 lines
2.3 KiB
YAML
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
|