Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/tools/ci/docker-containers-windows
4095 views
#!/usr/bin/env bash
#
# This script builds and pushes windows Docker containers. Maintainers
# can run this without pushing to a remote repo as long as DOCKER_LOGIN or
# DOCKER_PASSWORD are not set. For pushing to personal repos
# set those 2 env vars and update the *_IMAGE values below to point to your repos
#
# This script expects to be run from the repo root and has checks for running
# from a Drone trigger.

set -euxo pipefail

# Environment variables used throughout this script. These must be set
# otherwise bash will fail with an "unbound variable" error because of the `set
# -u` flag on the above line.
#
# If the environment variables are unset, the variables below default to an
# empty string.
export TARGET_CONTAINER=${1:-}
export DRONE_TAG=${DRONE_TAG:-}
export DRONE_BRANCH=${DRONE_BRANCH:-}
export DOCKER_LOGIN=${DOCKER_LOGIN:-}
export DOCKER_PASSWORD=${DOCKER_PASSWORD:-}

export AGENT_IMAGE=grafana/agent
export AGENTCTL_IMAGE=grafana/agentctl

if [ -n "$DRONE_TAG" ]; then
  VERSION=$DRONE_TAG
else
  VERSION=$(./tools/image-tag)
fi

VERSION_TAG=$VERSION-windows

# We also need to know which "branch tag" to update. Branch tags are used as a
# secondary tag for Docker containers. The branch tag is "latest" when being
# tagged from a stable release (i.e., not a release candidate) or the Drone
# branch when coming from a Drone job.
#
# If we're not running from drone, we'll set the branch tag to match the
# version. This effectively acts as a no-op because it will tag the same Docker
# image twice.
if [ -n "$DRONE_TAG" ] && [[ "$DRONE_TAG" != *"-rc."* ]]; then
  BRANCH_TAG=latest-windows
elif [ -n "$DRONE_BRANCH" ]; then
  BRANCH_TAG=$DRONE_BRANCH-windows
else
  BRANCH_TAG=$VERSION_TAG
fi

case "$TARGET_CONTAINER" in
  agent)
    docker build                                \
      -t "$AGENT_IMAGE:$VERSION_TAG"            \
      -t "$AGENT_IMAGE:$BRANCH_TAG"             \
      --build-arg VERSION="$VERSION"            \
      --build-arg RELEASE_BUILD=1               \
      -f ./cmd/grafana-agent/Dockerfile.windows \
      .
    ;;

  agentctl)
    docker build                                   \
      -t "$AGENTCTL_IMAGE:$VERSION_TAG"            \
      -t "$AGENTCTL_IMAGE:$BRANCH_TAG"             \
      --build-arg VERSION="$VERSION"               \
      --build-arg RELEASE_BUILD=1                  \
      -f ./cmd/grafana-agentctl/Dockerfile.windows \
      .
    ;;

  *)
    echo "Usage: $0 agent|agentctl"
    exit 1
    ;;
esac

# Push images only if we have docker credentials and a drone tag is set
if [ -n "$DOCKER_LOGIN" ] && [ -n "$DOCKER_PASSWORD" ]; then
  docker login -u "$DOCKER_LOGIN" -p "$DOCKER_PASSWORD"

  case "$TARGET_CONTAINER" in
    agent)
      docker push "$AGENT_IMAGE:$VERSION_TAG"
      docker push "$AGENT_IMAGE:$BRANCH_TAG"
      ;;

    agentctl)
      docker push "$AGENTCTL_IMAGE:$VERSION_TAG"
      docker push "$AGENTCTL_IMAGE:$BRANCH_TAG"
      ;;

    *)
      echo "Usage: $0 agent|agentctl"
      exit 1
      ;;
  esac
fi