Skip to content

Commit 37563b4

Browse files
committed
try to accomodate publishing via aws/github oidc env vars
1 parent 4481169 commit 37563b4

File tree

3 files changed

+104
-38
lines changed

3 files changed

+104
-38
lines changed

linux/publish

Lines changed: 78 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,21 @@ DOCKER_IMAGE_VERSION=$(cat "$ROOTDIR/shared/definitions/docker_image_version")
88
# shellcheck source=../shared/lib/library.sh
99
source "$ROOTDIR/shared/lib/library.sh"
1010

11-
INPUT_DIR=
12-
VERSION=
13-
SIGNING_KEY_FILE=
14-
FILE_SERVER_PASSWORD_FILE=
15-
AWS_ACCESS_KEY=
16-
AWS_SECRET_KEY_FILE=
17-
SIGNING_KEY_PASSWORD_FILE=
18-
ENTERPRISE=false
19-
TESTING=true
11+
declare INPUT_DIR
12+
declare VERSION
13+
declare SIGNING_KEY_FILE
14+
declare FILE_SERVER_PASSWORD_FILE
15+
if [ "${GITHUB_ACTION:-false}" != "true" ]; then
16+
declare AWS_ACCESS_KEY
17+
declare AWS_SECRET_KEY_FILE
18+
else
19+
declare AWS_SECRET_ACCESS_KEY
20+
declare AWS_ACCESS_KEY_ID
21+
declare AWS_SESSION_TOKEN
22+
fi
23+
declare SIGNING_KEY_PASSWORD_FILE
24+
declare ENTERPRISE=false
25+
declare TESTING=true
2026

2127
function usage()
2228
{
@@ -28,8 +34,14 @@ function usage()
2834
echo " -v VERSION Passenger version number"
2935
echo " -S PATH File containing the package signing key"
3036
echo " -p PATH File containing the binary build automation file server password"
31-
echo " -a KEY Amazon S3 access key"
32-
echo " -s KEY File containing the Amazon S3 secret key"
37+
if [ "${GITHUB_ACTION:-false}" != "true" ]; then
38+
echo " -a KEY Amazon S3 access key"
39+
echo " -s KEY File containing the Amazon S3 secret key"
40+
else
41+
echo " -k KEY Amazon S3 secret access key"
42+
echo " -d ID Amazon S3 access key id"
43+
echo " -t TOKEN Amazon S3 session token"
44+
fi
3345
echo
3446
echo "Optional options:"
3547
echo " -x PATH File containing the package signing key password"
@@ -42,7 +54,7 @@ function parse_options()
4254
{
4355
local OPTIND=1
4456
local opt
45-
while getopts "i:v:S:p:a:s:x:Euh" opt; do
57+
while getopts "i:v:S:p:a:k:d:s:t:x:Euh" opt; do
4658
case "$opt" in
4759
i)
4860
INPUT_DIR="$OPTARG"
@@ -59,9 +71,18 @@ function parse_options()
5971
a)
6072
AWS_ACCESS_KEY="$OPTARG"
6173
;;
74+
k)
75+
AWS_SECRET_ACCESS_KEY="$OPTARG"
76+
;;
77+
d)
78+
AWS_ACCESS_KEY_ID="$OPTARG"
79+
;;
6280
s)
6381
AWS_SECRET_KEY_FILE="$OPTARG"
6482
;;
83+
t)
84+
AWS_SESSION_TOKEN="$OPTARG"
85+
;;
6586
x)
6687
SIGNING_KEY_PASSWORD_FILE="$OPTARG"
6788
;;
@@ -101,17 +122,32 @@ function parse_options()
101122
echo "ERROR: $FILE_SERVER_PASSWORD_FILE does not exist."
102123
exit 1
103124
fi
104-
if [[ "$AWS_ACCESS_KEY" = "" ]]; then
105-
echo "ERROR: please specify an AWS S3 access key with -a."
106-
exit 1
107-
fi
108-
if [[ "$AWS_SECRET_KEY_FILE" = "" ]]; then
109-
echo "ERROR: please specify an AWS S3 secret key file with -s."
110-
exit 1
111-
fi
112-
if [[ ! -e "$AWS_SECRET_KEY_FILE" ]]; then
113-
echo "ERROR: $AWS_SECRET_KEY_FILE does not exist."
114-
exit 1
125+
if [ "${GITHUB_ACTION:-false}" != "true" ]; then
126+
if [[ "$AWS_ACCESS_KEY" = "" ]]; then
127+
echo "ERROR: please specify an AWS S3 access key with -a."
128+
exit 1
129+
fi
130+
if [[ "$AWS_SECRET_KEY_FILE" = "" ]]; then
131+
echo "ERROR: please specify an AWS S3 secret key file with -s."
132+
exit 1
133+
fi
134+
if [[ ! -e "$AWS_SECRET_KEY_FILE" ]]; then
135+
echo "ERROR: $AWS_SECRET_KEY_FILE does not exist."
136+
exit 1
137+
fi
138+
else
139+
if [[ "$AWS_SECRET_ACCESS_KEY" = "" ]]; then
140+
echo "ERROR: please specify an AWS S3 secret access key with -k."
141+
exit 1
142+
fi
143+
if [[ "$AWS_ACCESS_KEY_ID" = "" ]]; then
144+
echo "ERROR: please specify an AWS S3 access key id with -d."
145+
exit 1
146+
fi
147+
if [[ "$AWS_SESSION_TOKEN" = "" ]]; then
148+
echo "ERROR: please specify an AWS S3 session token with -t."
149+
exit 1
150+
fi
115151
fi
116152

117153
if [[ "$SIGNING_KEY_PASSWORD_FILE" != "" && ! -e "$SIGNING_KEY_PASSWORD_FILE" ]]; then
@@ -122,17 +158,28 @@ function parse_options()
122158

123159
parse_options "$@"
124160

161+
declare -a TTY_ARGS
125162
if tty -s; then
126-
TTY_ARGS="-t -i"
127-
else
128-
TTY_ARGS=
163+
TTY_ARGS=("-t" "-i")
129164
fi
130165

131-
EXTRA_DOCKER_ARGS=()
166+
declare -a EXTRA_DOCKER_ARGS
132167
INPUT_DIR=$(absolute_path "$INPUT_DIR")
133168
FILE_SERVER_PASSWORD_FILE=$(absolute_path "$FILE_SERVER_PASSWORD_FILE")
134-
AWS_SECRET_KEY_FILE=$(absolute_path "$AWS_SECRET_KEY_FILE")
135-
169+
declare -a S3_ARGS
170+
if [ "${GITHUB_ACTION:-false}" != "true" ]; then
171+
AWS_SECRET_KEY_FILE=$(absolute_path "$AWS_SECRET_KEY_FILE")
172+
S3_ARGS=("-v" "$AWS_SECRET_KEY_FILE:/aws_secret_key:ro" "-e" "AWS_ACCESS_KEY=$AWS_ACCESS_KEY")
173+
else
174+
# docker's -e flag can use env var names without values
175+
S3_ARGS=(
176+
"-e" "AWS_ACCESS_KEY_ID"
177+
"-e" "AWS_SECRET_ACCESS_KEY"
178+
"-e" "AWS_SESSION_TOKEN"
179+
"-e" "AWS_REGION=us-east-1"
180+
"-e" "GITHUB_ACTION=true"
181+
)
182+
fi
136183
if [[ "$SIGNING_KEY_PASSWORD_FILE" != "" ]]; then
137184
EXTRA_DOCKER_ARGS+=(-v "$SIGNING_KEY_PASSWORD_FILE:/signing_key_password:ro")
138185
fi
@@ -148,19 +195,18 @@ function cleanup()
148195
}
149196

150197
echo "-------- Entering Docker container --------"
151-
exec docker run $TTY_ARGS --rm \
198+
exec docker run "${TTY_ARGS[@]}" --rm \
152199
-v "$ROOTDIR:/system:ro" \
153200
-v "$INPUT_DIR:/input:ro" \
154201
-v "$SIGNING_KEY_FILE:/signing_key:ro" \
155202
-v "$FILE_SERVER_PASSWORD_FILE:/file_server_password:ro" \
156-
-v "$AWS_SECRET_KEY_FILE:/aws_secret_key:ro" \
157203
-e "APP_UID=$(/usr/bin/id -u)" \
158204
-e "APP_GID=$(/usr/bin/id -g)" \
159205
-e "TESTING=$TESTING" \
160206
-e "REPOSITORY_NAME=$REPOSITORY_NAME" \
161207
-e "S3_BUCKET_NAME=$S3_BUCKET_NAME" \
162208
-e "VERSION=$VERSION" \
163-
-e "AWS_ACCESS_KEY=$AWS_ACCESS_KEY" \
209+
"${S3_ARGS[@]}" \
164210
"${EXTRA_DOCKER_ARGS[@]}" \
165211
"phusion/passenger_binary_build_automation:$DOCKER_IMAGE_VERSION" \
166212
/system/linux/support/publish-script-docker-entrypoint.sh

linux/support/publish-script-docker-entrypoint.sh

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,15 @@ source /system/shared/lib/library.sh
99
export WORKDIR=`setuser builder mktemp -d /tmp/publish.XXXXXXXX`
1010
export INPUT_DIR=/input
1111
export FILE_SERVER_PASSWORD=`cat /file_server_password`
12-
export AWS_SECRET_KEY=`cat /aws_secret_key`
12+
if [ "${GITHUB_ACTION:-false}" != "true" ]; then
13+
export AWS_SECRET_KEY=`cat /aws_secret_key`
14+
else
15+
export "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID"
16+
export "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY"
17+
export "AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN"
18+
export "AWS_REGION=$AWS_REGION"
19+
export "GITHUB_ACTION=$GITHUB_ACTION"
20+
fi
1321

1422
setuser builder mkdir ~builder/.gnupg
1523
setuser builder chmod 700 ~builder/.gnupg

shared/publish/publish.sh

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,15 @@ require_envvar VERSION "$VERSION"
1111
require_envvar FILE_SERVER_PASSWORD "$FILE_SERVER_PASSWORD"
1212
require_envvar REPOSITORY_NAME "$REPOSITORY_NAME"
1313
require_envvar S3_BUCKET_NAME "$S3_BUCKET_NAME"
14-
require_envvar AWS_ACCESS_KEY "$AWS_ACCESS_KEY"
15-
require_envvar AWS_SECRET_KEY "$AWS_SECRET_KEY"
14+
if [ "${GITHUB_ACTION:-false}" != "true" ]; then
15+
require_envvar AWS_ACCESS_KEY "$AWS_ACCESS_KEY"
16+
require_envvar AWS_SECRET_KEY "$AWS_SECRET_KEY"
17+
else
18+
require_envvar AWS_ACCESS_KEY_ID "$AWS_ACCESS_KEY_ID"
19+
require_envvar AWS_SECRET_ACCESS_KEY "$AWS_SECRET_ACCESS_KEY"
20+
require_envvar AWS_SESSION_TOKEN "$AWS_SESSION_TOKEN"
21+
require_envvar AWS_REGION "$AWS_REGION"
22+
fi
1623
require_envvar TESTING "$TESTING"
1724

1825

@@ -53,16 +60,21 @@ curl --fail -L -K "$WORKDIR/curl.cfg" \
5360
https://oss-binaries.phusionpassenger.com/binary_build_automation/add
5461
echo
5562

56-
S3CMD_ARGS=()
63+
declare -a S3CMD_ARGS
5764
if ! $TESTING; then
5865
S3CMD_ARGS+=(--skip-existing)
5966
fi
67+
if [ "${GITHUB_ACTION:-false}" != "true" ]; then
6068
cat >>"$WORKDIR/s3cfg" <<EOF
6169
access_key = $AWS_ACCESS_KEY
6270
secret_key = $AWS_SECRET_KEY
6371
EOF
64-
echo "+ s3cmd -c $WORKDIR/s3cfg --storage-class=STANDARD_IA --human-readable-sizes --follow-symlinks --no-delete-removed --acl-public --guess-mime-type ${S3CMD_ARGS[*]} sync $WORKDIR/content/ s3://phusion-passenger/binaries/$S3_BUCKET_NAME/by_release/$VERSION/"
65-
s3cmd -c "$WORKDIR/s3cfg" \
72+
S3CMD_ARGS+=("-c" "$WORKDIR/s3cfg")
73+
else
74+
75+
fi
76+
echo "+ s3cmd --storage-class=STANDARD_IA --human-readable-sizes --follow-symlinks --no-delete-removed --acl-public --guess-mime-type ${S3CMD_ARGS[*]} sync $WORKDIR/content/ s3://phusion-passenger/binaries/$S3_BUCKET_NAME/by_release/$VERSION/"
77+
s3cmd \
6678
--storage-class=STANDARD_IA \
6779
--human-readable-sizes \
6880
--follow-symlinks \

0 commit comments

Comments
 (0)