-
Notifications
You must be signed in to change notification settings - Fork 53
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build(humanlog): make the pro build publish without goreleaser
- Loading branch information
Showing
4 changed files
with
348 additions
and
12 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,34 +11,87 @@ permissions: | |
|
||
jobs: | ||
build: | ||
name: "build" | ||
strategy: | ||
matrix: | ||
go: [stable] | ||
os: | ||
- ubuntu-latest | ||
- macos-latest | ||
arch: | ||
- arm64 | ||
- amd64 | ||
runs-on: ${{ matrix.os }} | ||
targets: | ||
- name: linux-amd64 | ||
runner: ubuntu-latest | ||
goos: linux | ||
goarch: amd64 | ||
# - name: linux-arm64 | ||
# runner: ubuntu-latest | ||
# goos: linux | ||
# goarch: arm64 | ||
# goenvs: CC=aarch64-linux-gnu-gcc CXX=x86_64-linux-gnu-g++ | ||
# preinstall: sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu | ||
- name: darwin-amd64 | ||
runner: macos-latest | ||
goos: darwin | ||
goarch: amd64 | ||
- name: darwin-arm64 | ||
runner: macos-latest | ||
goos: darwin | ||
goarch: arm64 | ||
name: ${{ matrix.targets.name }} | ||
runs-on: ${{ matrix.targets.runner }} | ||
env: | ||
GOPRIVATE: "github.com/humanlogio/humanlog-pro" | ||
GH_ACCESS_TOKEN_FOR_HUMANLOGPRO: ${{ secrets.GH_ACCESS_TOKEN_FOR_HUMANLOGPRO }} | ||
GOARCH: ${{ matrix.arch }} | ||
CGO_ENABLED: 1 | ||
GOBIN: /usr/local/bin/ | ||
steps: | ||
- name: Set up Go 1 | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version: ${{ matrix.go }} | ||
go-version: stable | ||
cache: true | ||
- uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 | ||
- if: ${{ matrix.targets.preinstall != '' }} | ||
run: ${{ matrix.targets.preinstall }} | ||
- run: echo "${HOME}/.humanlog/bin" >> $GITHUB_PATH | ||
- run: curl https://humanlog.io/install_apictl.sh | bash | ||
- run: git config --global --add safe.directory '*' | ||
- run: git config --global url.https://[email protected]/.insteadOf https://github.com/ | ||
- run: go install github.com/goware/modvendor@latest | ||
- run: go mod vendor | ||
- run: modvendor -copy="**/*.a **/*.h" -v | ||
- run: go build -tags pro -o /tmp/humanlog-${{ matrix.os }}-${{ matrix.arch }} ./cmd/humanlog | ||
- run: mkdir -p dist/${{ matrix.targets.goos }}-${{ matrix.targets.goarch }} | ||
- run: ${{ matrix.targets.goenvs }} ./script/build.sh | ||
env: | ||
HUMANLOG_GOTAGS: pro | ||
GOOS: ${{ matrix.targets.goos }} | ||
GOARCH: ${{ matrix.targets.goarch }} | ||
- uses: actions/upload-artifact@v4 | ||
with: | ||
name: humanlog-bins-${{ matrix.targets.goos }}-${{ matrix.targets.goarch }} | ||
path: dist/* | ||
|
||
publish: | ||
name: "publish" | ||
needs: build | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 | ||
- run: echo "${HOME}/.humanlog/bin" >> $GITHUB_PATH | ||
- run: curl https://humanlog.io/install_apictl.sh | bash | ||
- uses: actions/upload-artifact/merge@v4 | ||
with: | ||
name: humanlog-bins | ||
pattern: humanlog-bins-* | ||
separate-directories: true | ||
delete-merged: true | ||
- uses: actions/download-artifact@v4 | ||
with: | ||
name: humanlog-bins | ||
- run: ./script/publish.sh | ||
env: | ||
CHANNEL: "dev" | ||
API_URL: "https://api.humanlog.dev" | ||
HMAC_KEY_ID: ${{ secrets.DEV_HMAC_KEY_ID }} | ||
HMAC_PRIVATE_KEY: ${{ secrets.DEV_HMAC_PRIVATE_KEY }} | ||
AWS_ACCESS_KEY_ID: ${{ secrets.S3_BINARIES_BUCKET_KEY_ID }} | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_BINARIES_BUCKET_ACCESS_KEY }} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,9 +10,49 @@ permissions: | |
contents: write | ||
|
||
jobs: | ||
build: | ||
name: "build" | ||
strategy: | ||
matrix: | ||
go: [stable] | ||
os: | ||
- ubuntu-latest | ||
- macos-latest | ||
arch: | ||
- arm64 | ||
- amd64 | ||
runs-on: ${{ matrix.os }} | ||
env: | ||
GOPRIVATE: "github.com/humanlogio/humanlog-pro" | ||
GH_ACCESS_TOKEN_FOR_HUMANLOGPRO: ${{ secrets.GH_ACCESS_TOKEN_FOR_HUMANLOGPRO }} | ||
GOARCH: ${{ matrix.arch }} | ||
steps: | ||
- name: Set up Go 1 | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version: ${{ matrix.go }} | ||
cache: true | ||
- uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 | ||
- run: git config --global --add safe.directory '*' | ||
- run: git config --global url.https://[email protected]/.insteadOf https://github.com/ | ||
- run: git fetch --force --tags | ||
- run: echo "${HOME}/.humanlog/bin" >> $GITHUB_PATH | ||
- run: curl https://humanlog.dev/install_apictl.sh | bash | ||
- run: go install github.com/goware/modvendor@latest | ||
- run: go mod vendor | ||
- run: modvendor -copy="**/*.a **/*.h" -v | ||
- run: go | ||
env: | ||
|
||
|
||
|
||
create_a_dev_release: | ||
name: create a dev release | ||
runs-on: ubuntu-latest | ||
container: | ||
image: ghcr.io/goreleaser/goreleaser-cross:v1.23.2 | ||
env: | ||
GOPRIVATE: "github.com/humanlogio/humanlog-pro" | ||
GH_ACCESS_TOKEN_FOR_HUMANLOGPRO: ${{ secrets.GH_ACCESS_TOKEN_FOR_HUMANLOGPRO }} | ||
|
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -euox pipefail | ||
|
||
root=$(git rev-parse --show-toplevel) | ||
|
||
gotags="${HUMANLOG_GOTAGS:-}" | ||
goos="${GOOS:-$(go env GOOS)}" | ||
goarch="${GOARCH:-$(go env GOARCH)}" | ||
is_prod_build="${HUMANLOG_IS_PROD_BUILD:-}" | ||
output_dir="${HUMANLOG_OUTDIR:-${root}/dist}" | ||
output_bin="${HUMANLOG_OUTBIN:-humanlog}" | ||
output_path="${output_dir}/${output_bin}" | ||
|
||
function latest_git_tag() { | ||
git describe --tags $(git rev-list --tags --max-count=1) | ||
} | ||
|
||
function git_commit_timestamp() { | ||
git show --no-patch --format=%ct | ||
} | ||
|
||
function git_short_commit() { | ||
git rev-parse --short HEAD | ||
} | ||
|
||
function current_version() { | ||
apictl version to-json --version $(latest_git_tag) | | ||
apictl version math build set $(git_short_commit) | ||
} | ||
|
||
function next_patch_version() { | ||
current_version | | ||
apictl version math patch add 1 | | ||
apictl version math pre add next | | ||
apictl version math pre add $(git_commit_timestamp) | ||
} | ||
|
||
function get_major() { | ||
jq -r '.major // 0' | ||
} | ||
|
||
function get_minor() { | ||
jq -r '.minor // 0' | ||
} | ||
|
||
function get_patch() { | ||
jq -r '.patch // 0' | ||
} | ||
|
||
function get_pre() { | ||
jq -r '.prereleases // [] | join(".")' | ||
} | ||
|
||
function get_build() { | ||
jq -r '.build // ""' | ||
} | ||
|
||
function main() { | ||
local major="" | ||
local minor="" | ||
local patch="" | ||
local pre="" | ||
local build="" | ||
local version="" | ||
if [[ "${is_prod_build}" != "true" ]]; then | ||
echo "setting version to $(next_patch_version | apictl version from-json)" | ||
major=$(next_patch_version | get_major) | ||
minor=$(next_patch_version | get_minor) | ||
patch=$(next_patch_version | get_patch) | ||
pre=$(next_patch_version | get_pre) | ||
build=$(next_patch_version | get_build) | ||
version=$(next_patch_version | apictl version from-json) | ||
else | ||
major=$(current_version | get_major) | ||
minor=$(current_version | get_minor) | ||
patch=$(current_version | get_patch) | ||
build=$(current_version | get_build) | ||
version=$(current_version | apictl version from-json) | ||
fi | ||
local tarname="humanlog_${version}_${goos}_${goarch}.tar.gz" | ||
|
||
local flags="-o ${output_path} -trimpath" | ||
if [[ ! -z "${gotags}" ]]; then | ||
flags+=" -tags ${gotags}" | ||
fi | ||
|
||
ldflags="-s -w" | ||
|
||
if [[ "${goos}" == "linux" ]]; then | ||
ldflags+=$" -extldflags '-lc -lrt -lpthread --static'" | ||
fi | ||
|
||
ldflags+=" -X main.versionMajor=${major}" | ||
ldflags+=" -X main.versionMinor=${minor}" | ||
ldflags+=" -X main.versionPatch=${patch}" | ||
ldflags+=" -X main.versionBuild=${build}" | ||
if [[ "${is_prod_build}" != "true" ]]; then | ||
ldflags+=" -X main.versionPrerelease=${pre}" | ||
ldflags+=" -X main.defaultApiAddr=https://api.humanlog.dev" | ||
ldflags+=" -X main.defaultBaseSiteAddr=https://humanlog.dev" | ||
else | ||
ldflags+=" -X main.defaultApiAddr=https://api.humanlog.io" | ||
ldflags+=" -X main.defaultBaseSiteAddr=https://humanlog.io" | ||
fi | ||
|
||
flags+=" -ldflags=\"${ldflags}\"" | ||
|
||
eval go build ${flags} ./cmd/humanlog | ||
|
||
cd ${output_dir} | ||
tar -zcvf ${tarname} humanlog | ||
} | ||
|
||
main |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -euox pipefail | ||
|
||
root=$(git rev-parse --show-toplevel) | ||
|
||
is_prod_build="${IS_PROD_BUILD:-}" | ||
api_url="${API_URL:-"https://api.humanlog.io"}" | ||
channel="${CHANNEL:-main}" | ||
project="${PROJECT:-humanlog}" | ||
bucket="${BUCKET:-humanlog-binaries}" | ||
region="${BUCKET_REGION:-sfo3}" | ||
endpoint="${BUCKET_ENDPOINT:-https://humanlog-binaries.sfo3.digitaloceanspaces.com}" | ||
cdn_endpoint="${BUCKET_CDN_ENDPOINT:-https://humanlog-binaries.sfo3.cdn.digitaloceanspaces.com}" | ||
|
||
function main() { | ||
local version=$(get_version | apictl version from-json) | ||
local major=$(get_version | get_major) | ||
local minor=$(get_version | get_minor) | ||
local patch=$(get_version | get_patch) | ||
local build=$(get_version | get_build) | ||
local pre="" | ||
if [[ "${is_prod_build}" != "true" ]]; then | ||
pre=$(get_version | get_pre) | ||
fi | ||
|
||
local bucketdir="${project}/${channel}/$(git_commit_timestamp)/$(git_short_commit)" | ||
|
||
for dir in $(find . -type d -name "humanlog-bins-*-*"); do | ||
local os=$(echo "${dir}" | sed 's/\.\/humanlog-bins-\(.*\)-\(.*\)/\1/') | ||
local arch=$(echo "${dir}" | sed 's/\.\/humanlog-bins-\(.*\)-\(.*\)/\2/') | ||
|
||
local filename="humanlog_${version}_${os}_${arch}.tar.gz" | ||
local bucketpath="${bucketdir}/${filename}" | ||
local download_url="${cdn_endpoint}/${bucket}/${bucketpath}" | ||
local sha256sum=$(get_sha256sum ${dir}/${filename}) | ||
|
||
local extra_flags="--build ${build}" | ||
if [[ "${pre}" != "" ]]; then | ||
extra_flags+=" --pre ${pre}" | ||
fi | ||
|
||
apictl --api.url ${api_url} create s3-artifact \ | ||
--filepath ${dir}/${filename} \ | ||
--s3.access_key $AWS_ACCESS_KEY_ID \ | ||
--s3.secret_key $AWS_SECRET_ACCESS_KEY \ | ||
--s3.endpoint ${endpoint} \ | ||
--s3.region ${region} \ | ||
--s3.bucket ${bucket} \ | ||
--s3.use_path_style=true \ | ||
--s3.directory ${bucketpath} | ||
|
||
apictl --api.url ${api_url} create version-artifact \ | ||
--project ${project} \ | ||
--major ${major} \ | ||
--minor ${minor} \ | ||
--patch ${patch} \ | ||
--sha256 ${sha256sum} \ | ||
--url ${download_url} \ | ||
--os ${os} \ | ||
--arch ${arch} \ | ||
--sig "no-signature" ${extra_flags} | ||
done | ||
|
||
apictl --api.url ${api_url} create published-version \ | ||
--project ${project} \ | ||
--channel ${channel} \ | ||
--version ${version} | ||
} | ||
|
||
function latest_git_tag() { | ||
git describe --tags $(git rev-list --tags --max-count=1) | ||
} | ||
|
||
function git_commit_timestamp() { | ||
git show --no-patch --format=%ct | ||
} | ||
|
||
function git_short_commit() { | ||
git rev-parse --short HEAD | ||
} | ||
|
||
function get_version() { | ||
if [[ "${is_prod_build}" != "true" ]]; then | ||
next_patch_version | ||
else | ||
current_version | ||
fi | ||
} | ||
|
||
function current_version() { | ||
apictl version to-json --version $(latest_git_tag) | | ||
apictl version math build set $(git_short_commit) | ||
} | ||
|
||
function next_patch_version() { | ||
current_version | | ||
apictl version math patch add 1 | | ||
apictl version math pre add next | | ||
apictl version math pre add $(git_commit_timestamp) | ||
} | ||
|
||
function get_major() { | ||
jq -r '.major // 0' | ||
} | ||
|
||
function get_minor() { | ||
jq -r '.minor // 0' | ||
} | ||
|
||
function get_patch() { | ||
jq -r '.patch // 0' | ||
} | ||
|
||
function get_pre() { | ||
jq -r '.prereleases // [] | join(".")' | ||
} | ||
|
||
function get_build() { | ||
jq -r '.build // ""' | ||
} | ||
|
||
function get_sha256sum() { | ||
local filename=${1} | ||
shasum -a 256 ${filename} | cut -d " " -f 1 | ||
} | ||
|
||
main |