1
0
Fork 0
mirror of https://github.com/Luzifer/github-publish.git synced 2024-11-14 00:52:50 +00:00
github-publish/golang.sh

152 lines
3.6 KiB
Bash
Raw Normal View History

2016-11-21 12:48:30 +00:00
#!/bin/bash
set -euo pipefail
curl -sL https://raw.githubusercontent.com/Luzifer/github-publish/master/SHA256SUMS |
grep "golang.sh" | sha256sum -c || exit 2
2016-11-21 12:48:30 +00:00
(which zip 2>&1 1>/dev/null) || {
(which apk 2>&1 1>/dev/null) && apk add --update gawk zip
(which apt-get 2>&1 1>/dev/null) && apt-get update && apt-get install -y zip
}
function log() {
echo "${@}" >&2
}
function step() {
log "===> $@..."
}
function substep() {
log "======> $@..."
}
VERSION=$(git describe --tags --always || echo "dev")
PWD=$(pwd)
godir=${PWD/${GOPATH}\/src\//}
REPO=${REPO:-$(echo ${godir} | cut -d '/' -f 3)}
GHUSER=${GHUSER:-$(echo ${godir} | cut -d '/' -f 2)}
ARCHS=(${ARCHS:-linux/amd64 linux/arm darwin/amd64 windows/amd64})
DEPLOYMENT_TAG=${DEPLOYMENT_TAG:-${VERSION}}
PACKAGES=(${PACKAGES:-$(echo ${godir} | cut -d '/' -f 1-3)})
BUILD_DIR=${BUILD_DIR:-.build}
DRAFT=${DRAFT:-true}
2019-02-04 15:24:54 +00:00
FORCE_SKIP_UPLOAD=${FORCE_SKIP_UPLOAD:-false}
MOD_MODE=${MOD_MODE:-readonly}
NO_TESTS=${NO_TESTS:-false}
2016-11-21 12:48:30 +00:00
go_params=(
"-mod=${MOD_MODE}"
-modcacherw
-trimpath
)
step "Check go environment"
go version
step "Retrieve dependencies"
tool_gopath=$(mktemp -d)
trap "rm -rf ${tool_gopath}" EXIT
substep "Install github-release"
GOPATH=${tool_gopath} go install \
"${go_params}" \
github.com/Luzifer/github-release@3a6db3f4eb5d
if [[ $NO_TESTS == false ]]; then
step "Test code"
go vet "${go_params[@]}" ${PACKAGES}
go test "${go_params[@]}" ${PACKAGES}
fi
step "Extract changelog"
changelog=$([ -f "${PWD}/History.md" ] && awk '/^#/ && ++c==2{exit}; /^#/f' "${PWD}/History.md" | tail -n +2 || echo "")
step "Cleanup build directory if present"
rm -rf ${BUILD_DIR}
step "Compile program"
mkdir ${BUILD_DIR}
build_params=(
-ldflags="-X main.version=${VERSION}"
)
for package in "${PACKAGES[@]}"; do
for osarch in "${ARCHS[@]}"; do
export GOOS=${osarch%%/*}
export GOARCH=${osarch##*/}
[[ ${GOOS} == "windows" ]] && suffix=".exe" || suffix=""
outfile="${BUILD_DIR}/${package##*/}_${GOOS}_${GOARCH}${suffix}"
substep "Build for ${osarch} into ${outfile}"
go build \
-o "${outfile}" \
"${go_params[@]}" \
"${build_params[@]}" \
"${package}"
done
done
2016-11-21 12:48:30 +00:00
step "Generate binary SHASUMs"
cd ${BUILD_DIR}
sha256sum * >SHA256SUMS
2016-11-21 12:48:30 +00:00
step "Pack archives"
for file in *; do
if [ "${file}" = "SHA256SUMS" ]; then
continue
fi
if [[ ${file} == *linux* ]]; then
tar -czf "${file%%.*}.tar.gz" "${file}"
else
zip "${file%%.*}.zip" "${file}"
fi
rm "${file}"
done
step "Generate archive SHASUMs"
sha256sum * >>SHA256SUMS
grep -v 'SHA256SUMS' SHA256SUMS >SHA256SUMS.tmp
mv SHA256SUMS.tmp SHA256SUMS
log -e "\n\n=== Recorded checksums ==="
2019-02-04 15:24:54 +00:00
cat SHA256SUMS
if [[ ${FORCE_SKIP_UPLOAD} == "true" ]]; then
log "Upload is skipped, stopping build now."
exit 0
2019-02-04 15:24:54 +00:00
fi
step "Publish builds to Github"
if ! git describe --tags --exact-match; then
log "No tag present, stopping build now."
exit 0
fi
2016-11-21 12:48:30 +00:00
if [ -z "${GITHUB_TOKEN}" ]; then
log 'Please set $GITHUB_TOKEN environment variable'
exit 1
fi
2016-11-21 12:48:30 +00:00
2019-02-04 15:24:54 +00:00
if [[ ${DRAFT} == "true" ]]; then
step "Create a drafted release"
echo "${changelog}" | ${tool_gopath}/bin/github-release release --user ${GHUSER} --repo ${REPO} --tag ${DEPLOYMENT_TAG} --name ${DEPLOYMENT_TAG} --description - --draft || true
else
step "Create a published release"
echo "${changelog}" | ${tool_gopath}/bin/github-release release --user ${GHUSER} --repo ${REPO} --tag ${DEPLOYMENT_TAG} --name ${DEPLOYMENT_TAG} --description - || true
fi
2016-11-21 12:48:30 +00:00
step "Upload build assets"
for file in *; do
substep ${file}
${tool_gopath}/bin/github-release upload --user ${GHUSER} --repo ${REPO} --tag ${DEPLOYMENT_TAG} --name ${file} --file ${file}
2016-11-21 12:48:30 +00:00
done
cd -