1*c8dee2aaSAndroid Build Coastguard Worker#!/bin/bash -e 2*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2023 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker# 4*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker# 7*c8dee2aaSAndroid Build Coastguard Worker# This script is intended to be passed to Bazel using the --workspace_status_command command-line 8*c8dee2aaSAndroid Build Coastguard Worker# flag. It defines various key/value pairs, such as the Git hash or clean/dirty status, which can be 9*c8dee2aaSAndroid Build Coastguard Worker# used from BUILD files, e.g. to tag Docker images. 10*c8dee2aaSAndroid Build Coastguard Worker# 11*c8dee2aaSAndroid Build Coastguard Worker# See https://bazel.build/docs/user-manual#flag--workspace_status_command. 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker# Default values used if we are outside of a Git checkout, e.g. when building inside a tryjob. 14*c8dee2aaSAndroid Build Coastguard WorkerSTABLE_GIT_REVISION=unversioned 15*c8dee2aaSAndroid Build Coastguard WorkerSTABLE_GIT_STATUS=unversioned 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker# If we are inside a Git checkout, then obtain the Git revision and the clean/dirty status. 18*c8dee2aaSAndroid Build Coastguard Workerif git status > /dev/null 2> /dev/null; then 19*c8dee2aaSAndroid Build Coastguard Worker STABLE_GIT_REVISION=`git rev-parse HEAD` 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker # Check whether there are any uncommitted changes. 22*c8dee2aaSAndroid Build Coastguard Worker # 23*c8dee2aaSAndroid Build Coastguard Worker # Based on: 24*c8dee2aaSAndroid Build Coastguard Worker # https://skia.googlesource.com/buildbot/+/cdbd6dc7cd9e06604042bb53a6179a77b4c83c25/bash/docker_build.sh#53 25*c8dee2aaSAndroid Build Coastguard Worker STABLE_GIT_STATUS=clean 26*c8dee2aaSAndroid Build Coastguard Worker # Detect if we have unchecked in local changes, or if we're not on the main branch (possibly at 27*c8dee2aaSAndroid Build Coastguard Worker # an older revision). 28*c8dee2aaSAndroid Build Coastguard Worker git fetch > /dev/null 29*c8dee2aaSAndroid Build Coastguard Worker # diff-index requires update-index --refresh; see: 30*c8dee2aaSAndroid Build Coastguard Worker # https://stackoverflow.com/questions/36367190/git-diff-files-output-changes-after-git-status/36439778#36439778 31*c8dee2aaSAndroid Build Coastguard Worker if git update-index --refresh > /dev/null ; then 32*c8dee2aaSAndroid Build Coastguard Worker if ! git diff-index --quiet HEAD -- ; then 33*c8dee2aaSAndroid Build Coastguard Worker # Repository is dirty due to modified files. 34*c8dee2aaSAndroid Build Coastguard Worker STABLE_GIT_STATUS=dirty 35*c8dee2aaSAndroid Build Coastguard Worker elif ! git merge-base --is-ancestor HEAD origin/main ; then 36*c8dee2aaSAndroid Build Coastguard Worker # Repository is dirty because we're not on the main branch (possibly an older revision). 37*c8dee2aaSAndroid Build Coastguard Worker STABLE_GIT_STATUS=dirty 38*c8dee2aaSAndroid Build Coastguard Worker fi 39*c8dee2aaSAndroid Build Coastguard Worker else 40*c8dee2aaSAndroid Build Coastguard Worker # Repository is dirty due to checked out files. 41*c8dee2aaSAndroid Build Coastguard Worker STABLE_GIT_STATUS=dirty 42*c8dee2aaSAndroid Build Coastguard Worker fi 43*c8dee2aaSAndroid Build Coastguard Workerfi 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard WorkerBUILD_DATETIME=`date -u +%Y-%m-%dT%H_%M_%SZ` 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Workerecho "BUILD_DATETIME $BUILD_DATETIME" 48*c8dee2aaSAndroid Build Coastguard Workerecho "STABLE_GIT_REVISION $STABLE_GIT_REVISION" 49*c8dee2aaSAndroid Build Coastguard Workerecho "STABLE_GIT_STATUS $STABLE_GIT_STATUS" 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker# If the format of this ever changes then please also update k8s_checker/main.go. 52*c8dee2aaSAndroid Build Coastguard Workerecho "STABLE_DOCKER_TAG ${BUILD_DATETIME}-${USER}-${STABLE_GIT_REVISION:0:7}-${STABLE_GIT_STATUS}" 53