Skip to content

Commit 591e636

Browse files
committed
add action to set up S3 preview deployments
1 parent 93be9cc commit 591e636

2 files changed

Lines changed: 142 additions & 0 deletions

File tree

setup-s3-preview/action.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
name: 'Setup S3 Preview'
2+
description: 'Creates an S3 preview prefix by copying from the main prefix'
3+
inputs:
4+
deployment-name:
5+
description: 'Name of the deployment (used for ConfigMap name)'
6+
required: true
7+
namespace:
8+
description: 'Kubernetes namespace'
9+
required: true
10+
preview-number:
11+
description: 'Preview number (PR number)'
12+
required: true
13+
secret-name:
14+
description: 'Name of the secret containing AWS credentials'
15+
required: false
16+
default: 'app-secrets'
17+
18+
runs:
19+
using: "composite"
20+
steps:
21+
- name: Prepare setup-s3 job
22+
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+
35+
echo "Prepared job manifest: job-setup-s3.yml"
36+
shell: bash
37+
38+
- name: Create setup-s3 job
39+
run: |
40+
kubectl apply --namespace ${{ inputs.namespace }} -f job-setup-s3.yml
41+
shell: bash
42+
43+
- name: Wait for setup-s3 job to complete
44+
run: |
45+
JOB_NAME="prepare-s3-preview-${{ inputs.preview-number }}"
46+
NAMESPACE="${{ inputs.namespace }}"
47+
48+
echo "Waiting for job $JOB_NAME in namespace $NAMESPACE..."
49+
50+
if kubectl wait --namespace $NAMESPACE --for=condition=complete --timeout=10m job/$JOB_NAME; then
51+
echo "Job finished with status: Complete"
52+
kubectl logs job/$JOB_NAME --namespace $NAMESPACE
53+
elif kubectl wait --namespace $NAMESPACE --for=condition=failed --timeout=1s job/$JOB_NAME; then
54+
echo "Job finished with status: Failed"
55+
kubectl logs job/$JOB_NAME --namespace $NAMESPACE
56+
exit 1
57+
else
58+
echo "Timeout waiting for job to complete."
59+
kubectl logs job/$JOB_NAME --namespace $NAMESPACE || true
60+
exit 1
61+
fi
62+
shell: bash

setup-s3-preview/job-template.yml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: JOB_NAME_PLACEHOLDER
5+
spec:
6+
ttlSecondsAfterFinished: 60
7+
template:
8+
spec:
9+
restartPolicy: Never
10+
containers:
11+
- name: prepare-s3-preview
12+
image: amazon/aws-cli:2
13+
command: [ "bash", "-c" ]
14+
args:
15+
- |
16+
set -e
17+
18+
echo "### START $(date --iso-8601=seconds) ###"
19+
20+
S3_ARGS=""
21+
if [ -n "$S3_ENDPOINT" ]; then
22+
S3_ARGS="--endpoint-url $S3_ENDPOINT"
23+
fi
24+
25+
S3_MAIN_PREFIX="s3://$S3_BUCKET/main/"
26+
S3_PREVIEW_PREFIX="s3://$S3_BUCKET/preview-$PREVIEW_NUMBER/"
27+
28+
echo "Checking if $S3_PREVIEW_PREFIX already exists..."
29+
if [ "$(aws s3 $S3_ARGS ls "$S3_PREVIEW_PREFIX" | wc -l)" -gt 0 ]; then
30+
echo "$S3_PREVIEW_PREFIX already exists. Skipping setup."
31+
echo "Script finished successfully!"
32+
echo "### END $(date --iso-8601=seconds) ###"
33+
exit 0
34+
fi
35+
36+
echo "Syncing from $S3_MAIN_PREFIX to $S3_PREVIEW_PREFIX ..."
37+
aws s3 $S3_ARGS sync "$S3_MAIN_PREFIX" "$S3_PREVIEW_PREFIX"
38+
39+
echo "Script finished successfully!"
40+
echo "### END $(date --iso-8601=seconds) ###"
41+
env:
42+
- name: S3_BUCKET
43+
valueFrom:
44+
configMapKeyRef:
45+
name: CONFIGMAP_NAME_PLACEHOLDER
46+
key: S3_BUCKET
47+
- name: S3_ENDPOINT
48+
valueFrom:
49+
configMapKeyRef:
50+
name: CONFIGMAP_NAME_PLACEHOLDER
51+
key: S3_ENDPOINT
52+
optional: true
53+
- name: AWS_REGION
54+
valueFrom:
55+
configMapKeyRef:
56+
name: CONFIGMAP_NAME_PLACEHOLDER
57+
key: AWS_REGION
58+
- name: AWS_DEFAULT_REGION
59+
valueFrom:
60+
configMapKeyRef:
61+
name: CONFIGMAP_NAME_PLACEHOLDER
62+
key: AWS_REGION
63+
- name: AWS_ACCESS_KEY_ID
64+
valueFrom:
65+
secretKeyRef:
66+
name: SECRET_NAME_PLACEHOLDER
67+
key: AWS_ACCESS_KEY_ID
68+
- name: AWS_SECRET_ACCESS_KEY
69+
valueFrom:
70+
secretKeyRef:
71+
name: SECRET_NAME_PLACEHOLDER
72+
key: AWS_SECRET_ACCESS_KEY
73+
- name: AWS_SESSION_TOKEN
74+
valueFrom:
75+
secretKeyRef:
76+
name: SECRET_NAME_PLACEHOLDER
77+
key: AWS_SESSION_TOKEN
78+
optional: true
79+
- name: PREVIEW_NUMBER
80+
value: "PREVIEW_NUMBER_PLACEHOLDER"

0 commit comments

Comments
 (0)