graphql-engine/scripts/get-version.sh
Brandon Simmons f8fd61539e ci: finer-grained dependencies on build-servers artifacts
…p CI (#3975)

Trying out a new convention here for jobs that generate multiple
artifacts at different points in time, and where downstream jobs depend
on just a particular subset of artifacts and don't need to wait for the
entire job. We accomplish this with separate `Input` steps, which we
unblock manually via calls to the buildkite API once particular sets of
artifacts are complete.

We could accomplish the same thing by having multiple build server jobs
focused on particular targets ( this is in fact how it used to work)
but that is quite wasteful of CI resources;  in order to build any of
the binaries quickly, we need significant number of cores;  but if we
only build particular targets, we don't take advantage I've all those
cores relative to the parallelism a full cabal build gives us. That
would likely be more difficult to maintain as well.

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/4256
Co-authored-by: Vishnu Bharathi <4211715+scriptnull@users.noreply.github.com>
GitOrigin-RevId: 5f5603da8a85f9a491877d51a7c08764c7199602
2022-05-06 12:59:53 +00:00

41 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Outputs a version name for the hasura servers and their components, given the
# checked out state of the repo:
# - if HEAD has a tag, return that
# - else return a combination of branch and SHA hash
#
# In both of above we strip any non alpha-numeric, excluding: ._-
#
# This is called in a compile time macro to bake the version into the server
# binaries, and also at various points during CI (and must agree every time).
# When 'ci/server-test-mode' label is present in a PR, the CI runs in a
# so-called "server test mode". In server test mode, a server from some other
# CI build is used to run all the server test jobs. This causes some tests,
# which assert the version from /v1/version to be equal to the one
# returned by this script, to fail. SERVER_TEST_MODE env var is used to
# force the version to be set to the value in /build/_server_output/version.txt.
# This is done only for test_oss_server_pg_* CI jobs in server test mode.
if [[ "$SERVER_TEST_MODE" == "true" ]]; then
VERSION="$(cat /build/_server_output/version.txt)"
echo "$VERSION"
exit 0
fi
GIT_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
GIT_SHA="$(git rev-parse --short HEAD)"
# NOTE: a commit may have multiple tags; this should return the most recent
# result of `git tag` if any:
GIT_TAG_EXACT="$(git describe --tags --exact-match --dirty 2>/dev/null)"
GIT_DIRTY=$(test -n "`git status --porcelain`" && echo "-dirty" || echo "")
VERSION="${GIT_TAG_EXACT}"
# IMPORTANT: SHA hash needs to come first so we get a unique version string,
# even in the presence of truncation below
test -n "$VERSION" || VERSION="${GIT_SHA}${GIT_DIRTY}-${GIT_BRANCH}"
VERSION="$(echo $VERSION | tr -cd '[[:alnum:]]._-')"
# Truncate to 50 chars. See: https://github.com/hasura/graphql-engine-mono/pull/4183
echo "${VERSION:0:50}"