Skip to content

Commit 0069d51

Browse files
committed
parametrize S3 setup and teardown actions with configurable keys
1 parent a0aa6d7 commit 0069d51

4 files changed

Lines changed: 157 additions & 71 deletions

File tree

setup-s3-preview/action.yml

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
name: 'Setup S3 Preview'
22
description: 'Creates an S3 preview prefix by copying from the main prefix'
33
inputs:
4-
deployment-name:
5-
description: 'Name of the deployment (used for ConfigMap name)'
6-
required: true
4+
configmap-name:
5+
description: 'Name of the ConfigMap'
6+
required: false
7+
default: 'app-spring-deployment-env'
78
namespace:
89
description: 'Kubernetes namespace'
910
required: true
@@ -14,24 +15,66 @@ inputs:
1415
description: 'Name of the secret containing AWS credentials'
1516
required: false
1617
default: 'app-secrets'
18+
s3-bucket-key:
19+
description: 'Key for S3_BUCKET in ConfigMap'
20+
required: false
21+
default: 'S3_BUCKET'
22+
s3-endpoint-key:
23+
description: 'Key for S3_ENDPOINT in ConfigMap'
24+
required: false
25+
default: 'S3_ENDPOINT'
26+
aws-region-key:
27+
description: 'Key for AWS_REGION in ConfigMap'
28+
required: false
29+
default: 'AWS_REGION'
30+
aws-access-key-id-key:
31+
description: 'Key for AWS_ACCESS_KEY_ID in Secret'
32+
required: false
33+
default: 'AWS_ACCESS_KEY_ID'
34+
aws-secret-access-key-key:
35+
description: 'Key for AWS_SECRET_ACCESS_KEY in Secret'
36+
required: false
37+
default: 'AWS_SECRET_ACCESS_KEY'
38+
aws-session-token-key:
39+
description: 'Key for AWS_SESSION_TOKEN in Secret'
40+
required: false
41+
default: 'AWS_SESSION_TOKEN'
42+
base-prefix:
43+
description: 'Base prefix to copy from'
44+
required: false
45+
default: 'main'
1746

1847
runs:
1948
using: "composite"
2049
steps:
2150
- name: Prepare setup-s3 job
51+
env:
52+
JOB_NAME: "prepare-s3-preview-${{ inputs.preview-number }}"
53+
CONFIGMAP_NAME: "${{ inputs.configmap-name }}"
54+
SECRET_NAME: "${{ inputs.secret-name }}"
55+
S3_BUCKET_KEY: "${{ inputs.s3-bucket-key }}"
56+
S3_ENDPOINT_KEY: "${{ inputs.s3-endpoint-key }}"
57+
AWS_REGION_KEY: "${{ inputs.aws-region-key }}"
58+
AWS_ACCESS_KEY_ID_KEY: "${{ inputs.aws-access-key-id-key }}"
59+
AWS_SECRET_ACCESS_KEY_KEY: "${{ inputs.aws-secret-access-key-key }}"
60+
AWS_SESSION_TOKEN_KEY: "${{ inputs.aws-session-token-key }}"
61+
PREVIEW_NUMBER: "${{ inputs.preview-number }}"
62+
BASE_PREFIX: "${{ inputs.base-prefix }}"
2263
run: |
23-
JOB_NAME="prepare-s3-preview-${{ inputs.preview-number }}"
24-
CONFIGMAP_NAME="${{ inputs.deployment-name }}-environments"
25-
26-
# Create a temporary file for the manifest
27-
cp ${{ github.action_path }}/job-template.yml job-setup-s3.yml
28-
29-
# Replace placeholders
30-
sed -i "s/JOB_NAME_PLACEHOLDER/$JOB_NAME/g" job-setup-s3.yml
31-
sed -i "s/CONFIGMAP_NAME_PLACEHOLDER/$CONFIGMAP_NAME/g" job-setup-s3.yml
32-
sed -i "s/SECRET_NAME_PLACEHOLDER/${{ inputs.secret-name }}/g" job-setup-s3.yml
33-
sed -i "s/PREVIEW_NUMBER_PLACEHOLDER/${{ inputs.preview-number }}/g" job-setup-s3.yml
34-
64+
envsubst '
65+
$JOB_NAME
66+
$CONFIGMAP_NAME
67+
$SECRET_NAME
68+
$S3_BUCKET_KEY
69+
$S3_ENDPOINT_KEY
70+
$AWS_REGION_KEY
71+
$AWS_ACCESS_KEY_ID_KEY
72+
$AWS_SECRET_ACCESS_KEY_KEY
73+
$AWS_SESSION_TOKEN_KEY
74+
$PREVIEW_NUMBER
75+
$BASE_PREFIX
76+
' < ${{ github.action_path }}/job-template.yml > job-setup-s3.yml
77+
3578
echo "Prepared job manifest: job-setup-s3.yml"
3679
shell: bash
3780

@@ -41,10 +84,10 @@ runs:
4184
shell: bash
4285

4386
- name: Wait for setup-s3 job to complete
87+
env:
88+
JOB_NAME: "prepare-s3-preview-${{ inputs.preview-number }}"
89+
NAMESPACE: "${{ inputs.namespace }}"
4490
run: |
45-
JOB_NAME="prepare-s3-preview-${{ inputs.preview-number }}"
46-
NAMESPACE="${{ inputs.namespace }}"
47-
4891
echo "Waiting for job $JOB_NAME in namespace $NAMESPACE..."
4992
5093
if kubectl wait --namespace $NAMESPACE --for=condition=complete --timeout=10m job/$JOB_NAME; then

setup-s3-preview/job-template.yml

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
apiVersion: batch/v1
22
kind: Job
33
metadata:
4-
name: JOB_NAME_PLACEHOLDER
4+
name: ${JOB_NAME}
5+
labels:
6+
app.kubernetes.io/managed-by: github-actions
7+
app.kubernetes.io/component: s3-preview-setup
58
spec:
69
ttlSecondsAfterFinished: 60
710
template:
@@ -22,8 +25,8 @@ spec:
2225
S3_ARGS="--endpoint-url $S3_ENDPOINT"
2326
fi
2427
25-
S3_MAIN_PREFIX="s3://$S3_BUCKET/main/"
26-
S3_PREVIEW_PREFIX="s3://$S3_BUCKET/preview-$PREVIEW_NUMBER/"
28+
S3_MAIN_PREFIX="s3://$S3_BUCKET/${BASE_PREFIX}/"
29+
S3_PREVIEW_PREFIX="s3://$S3_BUCKET/preview-${PREVIEW_NUMBER}/"
2730
2831
echo "Checking if $S3_PREVIEW_PREFIX already exists..."
2932
if [ "$(aws s3 $S3_ARGS ls "$S3_PREVIEW_PREFIX" | wc -l)" -gt 0 ]; then
@@ -42,39 +45,39 @@ spec:
4245
- name: S3_BUCKET
4346
valueFrom:
4447
configMapKeyRef:
45-
name: CONFIGMAP_NAME_PLACEHOLDER
46-
key: S3_BUCKET
48+
name: ${CONFIGMAP_NAME}
49+
key: ${S3_BUCKET_KEY}
4750
- name: S3_ENDPOINT
4851
valueFrom:
4952
configMapKeyRef:
50-
name: CONFIGMAP_NAME_PLACEHOLDER
51-
key: S3_ENDPOINT
53+
name: ${CONFIGMAP_NAME}
54+
key: ${S3_ENDPOINT_KEY}
5255
optional: true
5356
- name: AWS_REGION
5457
valueFrom:
5558
configMapKeyRef:
56-
name: CONFIGMAP_NAME_PLACEHOLDER
57-
key: AWS_REGION
59+
name: ${CONFIGMAP_NAME}
60+
key: ${AWS_REGION_KEY}
5861
- name: AWS_DEFAULT_REGION
5962
valueFrom:
6063
configMapKeyRef:
61-
name: CONFIGMAP_NAME_PLACEHOLDER
62-
key: AWS_REGION
64+
name: ${CONFIGMAP_NAME}
65+
key: ${AWS_REGION_KEY}
6366
- name: AWS_ACCESS_KEY_ID
6467
valueFrom:
6568
secretKeyRef:
66-
name: SECRET_NAME_PLACEHOLDER
67-
key: AWS_ACCESS_KEY_ID
69+
name: ${SECRET_NAME}
70+
key: ${AWS_ACCESS_KEY_ID_KEY}
6871
- name: AWS_SECRET_ACCESS_KEY
6972
valueFrom:
7073
secretKeyRef:
71-
name: SECRET_NAME_PLACEHOLDER
72-
key: AWS_SECRET_ACCESS_KEY
74+
name: ${SECRET_NAME}
75+
key: ${AWS_SECRET_ACCESS_KEY_KEY}
7376
- name: AWS_SESSION_TOKEN
7477
valueFrom:
7578
secretKeyRef:
76-
name: SECRET_NAME_PLACEHOLDER
77-
key: AWS_SESSION_TOKEN
79+
name: ${SECRET_NAME}
80+
key: ${AWS_SESSION_TOKEN_KEY}
7881
optional: true
7982
- name: PREVIEW_NUMBER
80-
value: "PREVIEW_NUMBER_PLACEHOLDER"
83+
value: "${PREVIEW_NUMBER}"

teardown-s3-preview/action.yml

Lines changed: 55 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
name: 'Teardown S3 Preview'
22
description: 'Deletes the S3 preview prefix'
33
inputs:
4-
deployment-name:
5-
description: 'Name of the deployment (used for ConfigMap name)'
6-
required: true
4+
configmap-name:
5+
description: 'Name of the ConfigMap'
6+
required: false
7+
default: 'app-spring-deployment-env'
78
namespace:
89
description: 'Kubernetes namespace'
910
required: true
@@ -14,24 +15,60 @@ inputs:
1415
description: 'Name of the secret containing AWS credentials'
1516
required: false
1617
default: 'app-secrets'
18+
s3-bucket-key:
19+
description: 'Key for S3_BUCKET in ConfigMap'
20+
required: false
21+
default: 'S3_BUCKET'
22+
s3-endpoint-key:
23+
description: 'Key for S3_ENDPOINT in ConfigMap'
24+
required: false
25+
default: 'S3_ENDPOINT'
26+
aws-region-key:
27+
description: 'Key for AWS_REGION in ConfigMap'
28+
required: false
29+
default: 'AWS_REGION'
30+
aws-access-key-id-key:
31+
description: 'Key for AWS_ACCESS_KEY_ID in Secret'
32+
required: false
33+
default: 'AWS_ACCESS_KEY_ID'
34+
aws-secret-access-key-key:
35+
description: 'Key for AWS_SECRET_ACCESS_KEY in Secret'
36+
required: false
37+
default: 'AWS_SECRET_ACCESS_KEY'
38+
aws-session-token-key:
39+
description: 'Key for AWS_SESSION_TOKEN in Secret'
40+
required: false
41+
default: 'AWS_SESSION_TOKEN'
1742

1843
runs:
1944
using: "composite"
2045
steps:
2146
- name: Prepare teardown-s3 job
47+
env:
48+
JOB_NAME: "teardown-s3-preview-${{ inputs.preview-number }}"
49+
CONFIGMAP_NAME: "${{ inputs.configmap-name }}"
50+
SECRET_NAME: "${{ inputs.secret-name }}"
51+
S3_BUCKET_KEY: "${{ inputs.s3-bucket-key }}"
52+
S3_ENDPOINT_KEY: "${{ inputs.s3-endpoint-key }}"
53+
AWS_REGION_KEY: "${{ inputs.aws-region-key }}"
54+
AWS_ACCESS_KEY_ID_KEY: "${{ inputs.aws-access-key-id-key }}"
55+
AWS_SECRET_ACCESS_KEY_KEY: "${{ inputs.aws-secret-access-key-key }}"
56+
AWS_SESSION_TOKEN_KEY: "${{ inputs.aws-session-token-key }}"
57+
PREVIEW_NUMBER: "${{ inputs.preview-number }}"
2258
run: |
23-
JOB_NAME="teardown-s3-preview-${{ inputs.preview-number }}"
24-
CONFIGMAP_NAME="${{ inputs.deployment-name }}-environments"
25-
26-
# Create a temporary file for the manifest
27-
cp ${{ github.action_path }}/job-template.yml job-teardown-s3.yml
28-
29-
# Replace placeholders
30-
sed -i "s/JOB_NAME_PLACEHOLDER/$JOB_NAME/g" job-teardown-s3.yml
31-
sed -i "s/CONFIGMAP_NAME_PLACEHOLDER/$CONFIGMAP_NAME/g" job-teardown-s3.yml
32-
sed -i "s/SECRET_NAME_PLACEHOLDER/${{ inputs.secret-name }}/g" job-teardown-s3.yml
33-
sed -i "s/PREVIEW_NUMBER_PLACEHOLDER/${{ inputs.preview-number }}/g" job-teardown-s3.yml
34-
59+
envsubst '
60+
$JOB_NAME
61+
$CONFIGMAP_NAME
62+
$SECRET_NAME
63+
$S3_BUCKET_KEY
64+
$S3_ENDPOINT_KEY
65+
$AWS_REGION_KEY
66+
$AWS_ACCESS_KEY_ID_KEY
67+
$AWS_SECRET_ACCESS_KEY_KEY
68+
$AWS_SESSION_TOKEN_KEY
69+
$PREVIEW_NUMBER
70+
' < ${{ github.action_path }}/job-template.yml > job-teardown-s3.yml
71+
3572
echo "Prepared job manifest: job-teardown-s3.yml"
3673
shell: bash
3774

@@ -41,10 +78,10 @@ runs:
4178
shell: bash
4279

4380
- name: Wait for teardown-s3 job to complete
81+
env:
82+
JOB_NAME: "teardown-s3-preview-${{ inputs.preview-number }}"
83+
NAMESPACE: "${{ inputs.namespace }}"
4484
run: |
45-
JOB_NAME="teardown-s3-preview-${{ inputs.preview-number }}"
46-
NAMESPACE="${{ inputs.namespace }}"
47-
4885
echo "Waiting for job $JOB_NAME in namespace $NAMESPACE..."
4986
5087
if kubectl wait --namespace $NAMESPACE --for=condition=complete --timeout=5m job/$JOB_NAME; then

teardown-s3-preview/job-template.yml

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
apiVersion: batch/v1
22
kind: Job
33
metadata:
4-
name: JOB_NAME_PLACEHOLDER
4+
name: ${JOB_NAME}
5+
labels:
6+
app.kubernetes.io/managed-by: github-actions
7+
app.kubernetes.io/component: s3-preview-teardown
58
spec:
69
ttlSecondsAfterFinished: 60
710
template:
@@ -22,7 +25,7 @@ spec:
2225
S3_ARGS="--endpoint-url $S3_ENDPOINT"
2326
fi
2427
25-
S3_PREVIEW_PREFIX="s3://$S3_BUCKET/preview-$PREVIEW_NUMBER/"
28+
S3_PREVIEW_PREFIX="s3://$S3_BUCKET/preview-${PREVIEW_NUMBER}/"
2629
2730
echo "Checking if $S3_PREVIEW_PREFIX exists..."
2831
if [ "$(aws s3 $S3_ARGS ls "$S3_PREVIEW_PREFIX" | wc -l)" -eq 0 ]; then
@@ -41,39 +44,39 @@ spec:
4144
- name: S3_BUCKET
4245
valueFrom:
4346
configMapKeyRef:
44-
name: CONFIGMAP_NAME_PLACEHOLDER
45-
key: S3_BUCKET
47+
name: ${CONFIGMAP_NAME}
48+
key: ${S3_BUCKET_KEY}
4649
- name: S3_ENDPOINT
4750
valueFrom:
4851
configMapKeyRef:
49-
name: CONFIGMAP_NAME_PLACEHOLDER
50-
key: S3_ENDPOINT
52+
name: ${CONFIGMAP_NAME}
53+
key: ${S3_ENDPOINT_KEY}
5154
optional: true
5255
- name: AWS_REGION
5356
valueFrom:
5457
configMapKeyRef:
55-
name: CONFIGMAP_NAME_PLACEHOLDER
56-
key: AWS_REGION
58+
name: ${CONFIGMAP_NAME}
59+
key: ${AWS_REGION_KEY}
5760
- name: AWS_DEFAULT_REGION
5861
valueFrom:
5962
configMapKeyRef:
60-
name: CONFIGMAP_NAME_PLACEHOLDER
61-
key: AWS_REGION
63+
name: ${CONFIGMAP_NAME}
64+
key: ${AWS_REGION_KEY}
6265
- name: AWS_ACCESS_KEY_ID
6366
valueFrom:
6467
secretKeyRef:
65-
name: SECRET_NAME_PLACEHOLDER
66-
key: AWS_ACCESS_KEY_ID
68+
name: ${SECRET_NAME}
69+
key: ${AWS_ACCESS_KEY_ID_KEY}
6770
- name: AWS_SECRET_ACCESS_KEY
6871
valueFrom:
6972
secretKeyRef:
70-
name: SECRET_NAME_PLACEHOLDER
71-
key: AWS_SECRET_ACCESS_KEY
73+
name: ${SECRET_NAME}
74+
key: ${AWS_SECRET_ACCESS_KEY_KEY}
7275
- name: AWS_SESSION_TOKEN
7376
valueFrom:
7477
secretKeyRef:
75-
name: SECRET_NAME_PLACEHOLDER
76-
key: AWS_SESSION_TOKEN
78+
name: ${SECRET_NAME}
79+
key: ${AWS_SESSION_TOKEN_KEY}
7780
optional: true
7881
- name: PREVIEW_NUMBER
79-
value: "PREVIEW_NUMBER_PLACEHOLDER"
82+
value: "${PREVIEW_NUMBER}"

0 commit comments

Comments
 (0)