Browse Source

set up set_pipeline

master
Sean Johnson 5 months ago
parent
commit
2727e030af
  1. 154
      ci/repipe
  2. 11
      pipeline.yml
  3. 2
      resource/Dockerfile
  4. 1
      settings.yml

154
ci/repipe

@ -1,154 +0,0 @@
#!/bin/bash
#
# repipe.sh
#
# Script for merging together pipeline configuration files
# (via Spruce!) and configuring Concourse.
#
# author: James Hunt <james@niftylogic.com>
# Dennis Bell <dennis.j.bell@gmail.com>
# created: 2016-03-04
need_command() {
local cmd=${1:?need_command() - no command name given}
if [[ ! -x "$(command -v $cmd)" ]]; then
echo >&2 "${cmd} is not installed."
if [[ "${cmd}" == "spruce" ]]; then
echo >&2 "Please download it from https://github.com/geofffranks/spruce/releases"
fi
exit 2
fi
}
NO_FLY=
SAVE_MANIFEST=
VALIDATE_PIPELINE=
NON_INTERACTIVE=
cleanup() {
rm -f save-manifest.yml
if [[ -n ${SAVE_MANIFEST} && -e .deploy.yml ]]; then
mv .deploy.yml save-manifest.yml
fi
rm -f .deploy.yml .settings.yml
}
usage() {
echo Command line arguments:
echo "no-fly Do not execute any fly commands"
echo "save-manifest Save manifest to file save-manifest"
echo "validate Validate pipeline instead of set pipeline"
echo "validate-strict Validate pipeline with strict mode"
echo "non-interactive Run set-pipeline in non-interactive mode"
echo "open Open pipeline dashboard to browser (if possible)"
}
open_pipeline() {
url=$(show_pipeline_url)
cleanup
if [[ -x /usr/bin/open ]]; then
exec /usr/bin/open "$url"
else
echo "Sorry, but I was not able to automagically open"
echo "your Concourse Pipeline in the browser."
echo
echo "Here's a link you can click on, though:"
echo
echo " $url"
echo
exit 0;
fi
}
show_pipeline_url() {
spruce merge --skip-eval pipeline.yml ${settings_file} > .deploy.yml
concourse_url=$(spruce json .deploy.yml | jq -r ".meta.url")
team=$(spruce json .deploy.yml | jq -r ".meta.team // \"main\"")
pipeline=$(spruce merge --skip-eval \
--cherry-pick meta.pipeline \
--cherry-pick meta.name \
.deploy.yml | spruce merge - | spruce json | jq -r ".meta.pipeline")
echo "$concourse_url/teams/$team/pipelines/$pipeline"
exit 0
}
for arg do
case "${arg}" in
no-fly|no_fly) NO_FLY="yes" ;;
save-manifest|save_manifest) SAVE_MANIFEST="yes" ;;
validate) VALIDATE_PIPELINE="normal" ;;
validate-strict|validate_strict) VALIDATE_PIPELINE="strict" ;;
non-interactive|non_interactive) NON_INTERACTIVE="--non-interactive" ;;
url) SHOW_PIPELINE_URL="yes" ;;
open) OPEN_PIPELINE="yes" ;;
help|-h|--help) usage; exit 0 ;;
*) echo Invalid argument
usage
exit 1
esac
done
echo >&2 "Working in $(pwd)"
need_command spruce
# Allow for target-specific settings
settings_files="$(find $(pwd) -name settings.yml ${CONCOURSE_TARGET:+"-name settings-${CONCOURSE_TARGET}.yml"})"
if [[ -z "$settings_files" ]]
then
echo >&2 "Could not find any local settings files!"
exit 1
fi
echo >&2 "Using settings found in ${settings_files}"
set -e
trap "cleanup" QUIT TERM EXIT INT
[[ -n ${SHOW_PIPELINE_URL} ]] && { show_pipeline_url; exit 0; }
[[ -n ${OPEN_PIPELINE} ]] && { open_pipeline; exit 0; }
spruce merge --skip-eval ${settings_files} > .settings.yml
settings_file="$(pwd)/.settings.yml"
FRAGMENTS=$(find $(pwd) -type f -name "pipeline.yml")
spruce merge --prune meta ${FRAGMENTS} ${settings_file} > .deploy.yml
PIPELINE=$(spruce json ${settings_file} | jq -r '.meta.pipeline // ""')
if [[ -z ${PIPELINE} ]]; then
echo >&2 "Missing pipeline name in ci/settings.yml!"
exit 1
fi
TARGET_FROM_SETTINGS=$(spruce json ${settings_file} | jq -r '.meta.target // ""')
if [[ -z ${CONCOURSE_TARGET} ]]; then
TARGET=${TARGET_FROM_SETTINGS}
elif [[ "$CONCOURSE_TARGET" != "$TARGET_FROM_SETTINGS" ]]
then
echo >&2 "Target in {$settings_file} differs from target in \$CONCOURSE_TARGET"
echo >&2 " \$CONCOURSE_TARGET: $CONCOURSE_TARGET"
echo >&2 " Target in file: $TARGET_FROM_SETTINGS"
exit 1
else
TARGET=${CONCOURSE_TARGET}
fi
if [[ -z ${TARGET} ]]; then
echo >&2 "Missing Concourse Target in ci/settings.yml!"
exit 1
fi
fly_cmd="${FLY_CMD:-fly}"
[[ -n ${NO_FLY} ]] && { echo no fly execution requested ; exit 0; }
case "${VALIDATE_PIPELINE}" in
normal) fly_opts="validate-pipeline" ;;
strict) fly_opts="validate-pipeline --strict" ;;
*) fly_opts="set-pipeline ${NON_INTERACTIVE} --pipeline ${PIPELINE}" ;;
esac
set +x
$fly_cmd --target ${TARGET} ${fly_opts} --config .deploy.yml
[[ -n ${VALIDATE_PIPELINE} ]] && exit 0
$fly_cmd --target ${TARGET} unpause-pipeline --pipeline ${PIPELINE}

11
pipeline.yml

@ -38,6 +38,17 @@ resources:
.: (( inject meta.source ))
jobs:
- name: "pipeline"
public: true
plan:
- get: commons
- get: source
trigger: true
- task: "generate-pipeline"
file: (( grab meta.tasks.ci-repipe ))
- set_pipeline: self
file: metadata/pipeline.yml
- name: "convoy"
public: true
plan:

2
resource/Dockerfile

@ -1,5 +1,5 @@
ARG ALPINE_REPO=containers.dev.maio.me/library/alpine
ARG ALPINE_VERSION=v3.11
ARG ALPINE_VERSION=v3.13
ARG GOLANG_REPO=containers.dev.maio.me/library/golang
ARG GOLANG_VERSION=1.13.5

1
settings.yml

@ -24,6 +24,7 @@ meta:
branch: master
tasks:
ci-repipe: commons/tasks/ci/repipe.yml
img-build-oci: commons/tasks/img/build-oci.yml
img-write-tags: commons/tasks/img/write-tags.yml

Loading…
Cancel
Save