1- #! /bin/bash
2-
3- # Download layer from your prod release artifacts in Gitlab. Put layers in .layers
4- # Use with `VERSION=<version> REGION=<govcloud region> ./publish_govcloud.sh <DESIRED_NEW_VERSION>
5-
6- if [ ! -f " ../.layers/dd_trace_dotnet_amd64.zip" ]; then
7- printf " [ERROR]: Could not find .layers/dd_trace_dotnet_amd64.zip. Download from prod release artifacts.\n"
1+ #! /usr/bin/env bash
2+
3+ # Unless explicitly stated otherwise all files in this repository are licensed
4+ # under the Apache License Version 2.0.
5+ # This product includes software developed at Datadog (https://www.datadoghq.com/).
6+ # Copyright 2025 Datadog, Inc.
7+ #
8+ # USAGE: download the layer bundle from the build pipeline in gitlab. Use the
9+ # Download button on the `layer bundle` job. This will be a zip file containing
10+ # all of the required layers. Run this script as follows:
11+ #
12+ # ENVIRONMENT=[us1-staging-fed or us1-fed] [LAYER_NAME_SUFFIX=optional-layer-suffix] [REGIONS=us-gov-west-1] ./scripts/publish_govcloud.sh <layer-bundle.zip>
13+ #
14+ # protip: you can drag the zip file from finder into your terminal to insert
15+ # its path.
16+
17+ set -e
18+
19+ LAYER_PACKAGE=$1
20+
21+ if [ -z " $LAYER_PACKAGE " ]; then
22+ printf " [ERROR]: layer package not provided\n"
823 exit 1
924fi
1025
11- if [ ! -f " ../.layers/dd_trace_dotnet_arm64.zip" ]; then
12- printf " [ERROR]: Could not find .layers/dd_trace_dotnet_arm64.zip. Download from prod release artifacts.\n"
13- exit 1
14- fi
26+ PACKAGE_NAME=$( basename " $LAYER_PACKAGE " .zip)
1527
16- if [ -z " $VERSION " ]; then
17- printf " Must specify a desired version number using VERSION env var \n"
28+ if [ -z " $ENVIRONMENT " ]; then
29+ printf " [ERROR]: ENVIRONMENT not specified \n"
1830 exit 1
1931fi
2032
21- if [ -z " $REGION " ]; then
22- printf " Must specify region using REGION env var\n"
23- exit 1
24- fi
33+ if [ " $ENVIRONMENT " = " us1-staging-fed" ]; then
34+ AWS_VAULT_ROLE=sso-govcloud-us1-staging-fed-power-user
2535
26- echo " Ensuring you have access to the AWS GovCloud account..."
27- aws-vault exec sso-govcloud-us1-fed-engineering -- aws sts get-caller-identity
36+ export STAGE=gov-staging
2837
29- AVAILABLE_REGIONS=$( aws-vault exec sso-govcloud-us1-fed-engineering -- aws ec2 describe-regions | jq -r ' .[] | .[] | .RegionName' )
30- echo " Available regions:"
31- echo " $AVAILABLE_REGIONS "
32- REGION_VALID=false
33- echo
38+ if [[ ! " $PACKAGE_NAME " =~ ^dd_trace_dotnet-(signed-)? bundle-[0-9]+$ ]]; then
39+ echo " [ERROR]: Unexpected package name: $PACKAGE_NAME "
40+ exit 1
41+ fi
3442
35- for available_region in $AVAILABLE_REGIONS ; do
36- if [ " $REGION " == " $available_region " ]; then
37- REGION_VALID=true
38- break
43+ elif [ $ENVIRONMENT = " us1-fed" ]; then
44+ AWS_VAULT_ROLE=sso-govcloud-us1-fed-engineering
45+
46+ export STAGE=gov-prod
47+
48+ if [[ ! " $PACKAGE_NAME " =~ ^dd_trace_dotnet-signed-bundle-[0-9]+$ ]]; then
49+ echo " [ERROR]: Unexpected package name: $PACKAGE_NAME "
50+ exit 1
3951 fi
40- done
4152
42- if [ " $REGION_VALID " != " true" ]; then
43- echo " [ERROR]: Invalid region '$REGION '. Available regions are:"
44- echo " $AVAILABLE_REGIONS "
45- echo
53+ else
54+ printf " [ERROR]: ENVIRONMENT not supported, must be us1-staging-fed or us1-fed.\n"
4655 exit 1
4756fi
4857
49- LATEST_VERSION=$( aws-vault exec sso-govcloud-us1-fed-engineering \
50- -- aws lambda list-layer-versions \
51- --region $REGION --layer-name dd-trace-dotnet \
52- --query ' LayerVersions[0].Version || `0`' )
53- EXPECTED_VERSION=$(( LATEST_VERSION + 1 ))
58+ TEMP_DIR=$( mktemp -d)
59+ unzip $LAYER_PACKAGE -d $TEMP_DIR
60+ mkdir -p .layers
61+ cp -v $TEMP_DIR /$PACKAGE_NAME /* .zip .layers/
5462
5563
56- if [ " $VERSION " != " $EXPECTED_VERSION " ]; then
57- echo " [ERROR]: Version must be sequential. Latest version is $LATEST_VERSION , so next version must be $EXPECTED_VERSION "
58- echo
59- exit 1
60- fi
64+ AWS_VAULT_PREFIX=" aws-vault exec $AWS_VAULT_ROLE --"
6165
62- echo " Publishing tracer layer version $VERSION to region $REGION "
63- read -p " Continue? (y/n): " CONFIRM
64- if [[ $CONFIRM != " y" ]]; then
65- echo " Aborting."
66- echo
67- exit 1
66+ echo " Checking that you have access to the GovCloud AWS account"
67+ $AWS_VAULT_PREFIX aws sts get-caller-identity
68+
69+
70+ AVAILABLE_REGIONS=$( $AWS_VAULT_PREFIX aws ec2 describe-regions | jq -r ' .[] | .[] | .RegionName' )
71+
72+ # Determine the target regions
73+ if [ -z " $REGIONS " ]; then
74+ echo " Region not specified, running for all available regions."
75+ REGIONS=$AVAILABLE_REGIONS
76+ else
77+ echo " Region specified: $REGIONS "
78+ if [[ ! " $AVAILABLE_REGIONS " == * " $REGIONS " * ]]; then
79+ echo " Could not find $REGIONS in available regions: $AVAILABLE_REGIONS "
80+ echo " "
81+ echo " EXITING SCRIPT."
82+ exit 1
83+ fi
6884fi
6985
70- printf " Publishing dd-trace-dotnet...\n"
71- NEW_VERSION=$( aws-vault exec sso-govcloud-us1-fed-engineering -- \
72- aws lambda publish-layer-version --layer-name dd-trace-dotnet \
73- --description " dd-trace-dotnet" \
74- --compatible-runtimes " dotnet6" " dotnet8" \
75- --compatible-architectures " x86_64" \
76- --zip-file " fileb://../.layers/dd_trace_dotnet_amd64.zip" \
77- --region $REGION \
78- | jq -r ' .Version' )
79-
80- printf " Publishing dd-trace-dotnet-ARM...\n"
81- NEW_VERSION=$( aws-vault exec sso-govcloud-us1-fed-engineering -- \
82- aws lambda publish-layer-version --layer-name dd-trace-dotnet-ARM \
83- --description " dd-trace-dotnet" \
84- --compatible-runtimes " dotnet6" " dotnet8" \
85- --compatible-architectures " arm64" \
86- --zip-file " fileb://../.layers/dd_trace_dotnet_arm64.zip" \
87- --region $REGION \
88- | jq -r ' .Version' )
89-
90- printf " Setting permission for dd-trace-dotnet...\n"
91- permission=$( aws-vault exec sso-govcloud-us1-fed-engineering -- \
92- aws lambda add-layer-version-permission --layer-name dd-trace-dotnet \
93- --version-number $NEW_VERSION \
94- --statement-id " release-$NEW_VERSION " \
95- --action lambda:GetLayerVersion \
96- --principal " *" \
97- --region $REGION
98- )
99-
100- printf " Setting permission for dd-trace-dotnet-ARM...\n"
101- permission=$( aws-vault exec sso-govcloud-us1-fed-engineering -- \
102- aws lambda add-layer-version-permission --layer-name dd-trace-dotnet-ARM \
103- --version-number $NEW_VERSION \
104- --statement-id " release-$NEW_VERSION " \
105- --action lambda:GetLayerVersion \
106- --principal " *" \
107- --region $REGION
108- )
109-
110- echo " Published layer v$NEW_VERSION to $REGION !"
86+ for region in $REGIONS
87+ do
88+ echo " Starting publishing layers for region $region ..."
89+
90+ export REGION=$region
91+
92+ for arch in " amd64" " arm64" ; do
93+ export ARCHITECTURE=$arch
94+ export LAYER_FILE=" dd_trace_dotnet_${ARCHITECTURE} .zip"
95+
96+ echo " Publishing layer $LAYER_FILE for $ARCHITECTURE "
97+
98+ $AWS_VAULT_PREFIX .gitlab/scripts/publish_layers.sh
99+ done
100+ done
101+
102+ echo " Done !"
0 commit comments