Skip to content

Commit 18271bb

Browse files
authored
Feat/cache dependencies s3 prefix (#2129)
* add prefix to s3-cache
1 parent 93bd89f commit 18271bb

File tree

4 files changed

+33
-14
lines changed

4 files changed

+33
-14
lines changed

action.yml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,11 @@ inputs:
216216
required: false
217217
default: 'false'
218218
cache-dependencies-s3-bucket:
219-
description: "S3 bucket URL for caching (e.g., s3://mybucket/cache)"
219+
description: "S3 bucket name for caching without the leading s3 (e.g. mybucket)"
220+
required: false
221+
default: ''
222+
cache-dependencies-s3-bucket-prefix:
223+
description: "S3 bucket prefix for caching (e.g. cache)"
220224
required: false
221225
default: ''
222226
cache-dependencies-s3-region:
@@ -332,8 +336,9 @@ runs:
332336
- name: restore-s3-cache
333337
shell: bash
334338
run: |
335-
BUCKET=$(echo "${{ inputs.cache-dependencies-s3-bucket }}" | sed 's|^s3://||')
339+
BUCKET="${{ inputs.cache-dependencies-s3-bucket }}"
336340
REGION="${{ inputs.cache-dependencies-s3-region }}"
341+
PREFIX="${{ inputs.cache-dependencies-s3-bucket-prefix }}"
337342
338343
SCRIPT_PATH="${{ github.action_path }}/scripts/s3-cache-download.bash"
339344
if [ ! -f "$SCRIPT_PATH" ]; then
@@ -343,7 +348,7 @@ runs:
343348
fi
344349
345350
chmod +x "$SCRIPT_PATH"
346-
"$SCRIPT_PATH" "$BUCKET" "$REGION" "$TF_PLUGIN_CACHE_DIR"
351+
"$SCRIPT_PATH" "$BUCKET" "$PREFIX" "$REGION" "$TF_PLUGIN_CACHE_DIR"
347352
if: ${{ inputs.cache-dependencies-s3 == 'true' }}
348353

349354
# Then terraform setup happens...
@@ -641,8 +646,9 @@ runs:
641646
- name: save-s3-cache
642647
shell: bash
643648
run: |
644-
BUCKET=$(echo "${{ inputs.cache-dependencies-s3-bucket }}" | sed 's|^s3://||')
649+
BUCKET="${{ inputs.cache-dependencies-s3-bucket }}"
645650
REGION="${{ inputs.cache-dependencies-s3-region }}"
651+
PREFIX="${{ inputs.cache-dependencies-s3-bucket-prefix }}"
646652
647653
SCRIPT_PATH="${{ github.action_path }}/scripts/s3-cache-upload.bash"
648654
if [ ! -f "$SCRIPT_PATH" ]; then
@@ -652,7 +658,7 @@ runs:
652658
fi
653659
654660
chmod +x "$SCRIPT_PATH"
655-
"$SCRIPT_PATH" "$BUCKET" "$REGION" "$TF_PLUGIN_CACHE_DIR"
661+
"$SCRIPT_PATH" "$BUCKET" "$PREFIX" "$REGION" "$TF_PLUGIN_CACHE_DIR"
656662
if: ${{ always() && inputs.cache-dependencies-s3 == 'true' }}
657663

658664
branding:

docs/ce/howto/caching-strategies.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ You can cache in AWS s3 rather than artefacts. This requires a bucket for cachin
2929
- uses: diggerhq/digger@vLatest
3030
with:
3131
cache-dependencies-s3: true
32-
cache-dependencies-s3-bucket: s3://terraform-cache-1756322349465/cache
32+
cache-dependencies-s3-bucket: terraform-cache-1756322349465
33+
cache-dependencies-s3-bucket-prefix: cache
3334
cache-dependencies-s3-region: us-east-1
3435
```
3536

scripts/s3-cache-download.bash

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ set -e
55
# Downloads terraform/terragrunt provider cache from S3
66

77
BUCKET="$1"
8-
REGION="$2"
9-
CACHE_DIR="$3"
8+
PREFIX="$2"
9+
REGION="$3"
10+
CACHE_DIR="$4"
1011

1112
# Validation
1213
if [ -z "$BUCKET" ]; then
@@ -29,8 +30,8 @@ mkdir -p "$CACHE_DIR"
2930
echo "Ensuring cache directory exists: $CACHE_DIR"
3031

3132
# Download cache from S3
32-
echo "Restoring cache from S3 bucket: $BUCKET (region: $REGION)"
33-
if aws s3 sync "s3://$BUCKET" "$CACHE_DIR" --region "$REGION" --only-show-errors; then
33+
echo "Restoring cache from S3 bucket: $BUCKET (prefix: $PREFIX, region: $REGION)"
34+
if aws s3 sync "s3://$BUCKET/$PREFIX" "$CACHE_DIR" --region "$REGION"; then
3435
CACHED_FILES=$(find "$CACHE_DIR" -type f 2>/dev/null | wc -l)
3536
echo "Cache restored successfully ($CACHED_FILES files)"
3637

scripts/s3-cache-upload.bash

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,26 @@ set -e
55
# Uploads terraform/terragrunt provider cache to S3
66

77
BUCKET="$1"
8-
REGION="$2"
9-
CACHE_DIR="$3"
8+
PREFIX="$2"
9+
REGION="$3"
10+
CACHE_DIR="$4"
1011

1112
# Validation
1213
if [ -z "$BUCKET" ]; then
1314
echo "Error: S3 bucket name is required"
1415
exit 1
1516
fi
1617

18+
if [ -z "$PREFIX" ]; then
19+
echo "Error: S3 bucket prefix is required"
20+
exit 1
21+
fi
22+
23+
if [[ "$PREFIX" == /* ]]; then
24+
echo "Error: S3 bucket prefix should not start with a leading slash"
25+
exit 1
26+
fi
27+
1728
if [ -z "$REGION" ]; then
1829
echo "Error: AWS region is required"
1930
exit 1
@@ -53,10 +64,10 @@ if ! aws sts get-caller-identity --region "$REGION" &> /dev/null; then
5364
fi
5465

5566
# Upload cache to S3
56-
echo "Saving cache to S3 bucket: $BUCKET (region: $REGION)"
67+
echo "Saving cache to S3 bucket: $BUCKET (prefix: $PREFIX, region: $REGION)"
5768
echo "Uploading $ARTIFACT_COUNT files"
5869

59-
if aws s3 sync "$CACHE_DIR" "s3://$BUCKET" --region "$REGION" --only-show-errors; then
70+
if aws s3 sync "$CACHE_DIR" "s3://$BUCKET/$PREFIX" --region "$REGION"; then
6071
echo "Cache saved successfully"
6172
else
6273
echo "Warning: Failed to save cache (this won't fail the build)"

0 commit comments

Comments
 (0)