xref: /aosp_15_r20/external/skia/bazel/get_workspace_status.sh (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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