|
| 1 | +resource_types: |
| 2 | +- name: git-branches |
| 3 | + type: registry-image |
| 4 | + source: |
| 5 | + repository: aoldershaw/git-branches-resource |
| 6 | + |
| 7 | +resources: |
| 8 | +- name: feature-branches |
| 9 | + type: git-branches |
| 10 | + source: |
| 11 | + uri: https://github.com/concourse/examples |
| 12 | + branch_regex: 'feature/(?P<feature>.*)' |
| 13 | + |
| 14 | +- name: examples |
| 15 | + type: git |
| 16 | + source: |
| 17 | + uri: https://github.com/concourse/examples |
| 18 | + |
| 19 | +jobs: |
| 20 | +- name: set-feature-pipelines |
| 21 | + plan: |
| 22 | + - in_parallel: |
| 23 | + - get: feature-branches |
| 24 | + trigger: true |
| 25 | + - get: examples |
| 26 | + - load_var: branches |
| 27 | + file: feature-branches/branches.json |
| 28 | + - across: |
| 29 | + - var: branch |
| 30 | + values: ((.:branches)) |
| 31 | + set_pipeline: dev |
| 32 | + file: examples/pipelines/multi-branch/template.yml |
| 33 | + instance_vars: {feature: ((.:branch.groups.feature))} |
| 34 | + vars: {branch: ((.:branch.name))} |
| 35 | + |
| 36 | +- name: cleanup-inactive-workspaces |
| 37 | + plan: |
| 38 | + - get: feature-branches |
| 39 | + passed: [set-feature-pipelines] |
| 40 | + trigger: true |
| 41 | + - load_var: active_branches |
| 42 | + file: feature-branches/branches.json |
| 43 | + - task: cleanup |
| 44 | + config: |
| 45 | + platform: linux |
| 46 | + image_resource: |
| 47 | + type: registry-image |
| 48 | + source: {repository: hashicorp/terraform} |
| 49 | + params: |
| 50 | + ACTIVE_BRANCHES: ((.:active_branches)) |
| 51 | + TERRAFORM_BACKEND_CONFIG: |
| 52 | + terraform: |
| 53 | + backend: |
| 54 | + gcs: |
| 55 | + bucket: concourse-examples |
| 56 | + prefix: multi-branch/terraform |
| 57 | + credentials: ((concourse_artifacts_json_key)) |
| 58 | + run: |
| 59 | + path: sh |
| 60 | + args: |
| 61 | + - -c |
| 62 | + - | |
| 63 | + set -euo pipefail |
| 64 | +
|
| 65 | + apk add jq |
| 66 | +
|
| 67 | + active_features="$(echo "$ACTIVE_BRANCHES" | jq '[.[].groups.feature]')" |
| 68 | +
|
| 69 | + echo "$TERRAFORM_BACKEND_CONFIG" > backend.tf.json |
| 70 | + terraform init |
| 71 | + active_workspaces="$(terraform workspace list | grep -v '^[*]' | tr -d ' ' | jq --raw-input --slurp 'split("\n") | map(select(. != ""))')" |
| 72 | +
|
| 73 | + jq -nr "$active_workspaces - $active_features | .[]" | while read extra_workspace |
| 74 | + do |
| 75 | + echo "deleting workspace $extra_workspace" |
| 76 | + terraform workspace select "$extra_workspace" |
| 77 | + terraform init |
| 78 | +
|
| 79 | + terraform destroy -auto-approve |
| 80 | +
|
| 81 | + terraform workspace select default |
| 82 | + terraform workspace delete "$extra_workspace" |
| 83 | + done |
0 commit comments