Use new /v1/:type/:name/metadata in repipe script

Now, we automagically track github releases for github-hosted stuff, and
bosh-io releases for bosh.io-hosted stuff.
This commit is contained in:
James Hunt 2016-06-22 23:37:24 -04:00
parent 19d08193e7
commit aded7ce844
9 changed files with 134 additions and 10 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/genesis-index
.deploy.yml

View File

@ -65,6 +65,12 @@ GET /v1/release
GET /v1/release/:name
```
## Get Release Metadata
```
GET /v1/release/:name/metadata
```
## Get The Latest Release Version
```
@ -125,6 +131,12 @@ GET /v1/stemcell
GET /v1/stemcell/:name
```
## Get Stemcell Metadata
```
GET /v1/stemcell/:name/metadata
```
## Get The Latest Stemcell Version
```

View File

@ -61,6 +61,13 @@ func (api ReleaseAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) {
respond(w, err, 200, release)
return
case match(r, `GET /v1/release/[^/]+/metadata`):
name := extract(r, `/v1/release/([^/]+)/metadata`)
log.Debugf("retrieving latest version of release '%s'", name)
release, err := FindRelease(api.db, name)
respond(w, err, 200, release)
return
case match(r, `GET /v1/release/[^/]+/latest`):
name := extract(r, `/v1/release/([^/]+)/latest$`)
log.Debugf("retrieving latest version of release '%s'", name)

View File

@ -61,6 +61,13 @@ func (api StemcellAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) {
respond(w, err, 200, stemcell)
return
case match(r, `GET /v1/stemcell/[^/]+/metadata`):
name := extract(r, `/v1/stemcell/([^/]+)/metadata`)
log.Debugf("retrieving latest version of stemcell '%s'", name)
stemcell, err := FindStemcell(api.db, name)
respond(w, err, 200, stemcell)
return
case match(r, `GET /v1/stemcell/[^/]+/latest`):
name := extract(r, `/v1/stemcell/([^/]+)/latest$`)
log.Debugf("retrieving latest version of stemcell '%s'", name)

View File

@ -4,6 +4,8 @@ meta:
index: https://genesis.starkandwayne.com
username: (( vault "secret/pipelines/genesis-index/auth:username" ))
password: (( vault "secret/pipelines/genesis-index/auth:password" ))
github:
access_token: (( vault "secret/pipelines/genesis-index/github:token" ))
resource_types:
- name: script

View File

@ -22,7 +22,7 @@ if [[ -z ${SUBJECT} ]]; then
exit 1
fi
VERSION=$(cat ${CHECK_TYPE}/version)
VERSION=$(cat ${CHECK_TYPE}/version | sed -e 's/^v//')
echo
echo "Updating the index for ${CHECK_TYPE} ${SUBJECT} v${VERSION}"

View File

@ -1,6 +1,7 @@
groups:
- jobs:
- bind9
- bolo
- bosh-aws-cpi
- bosh-azure-cpi
- bosh-openstack-cpi
@ -57,6 +58,33 @@ jobs:
task: update-index
public: true
serial: false
- name: bolo
plan:
- get: bolo
trigger: true
- get: version-check-script
- config:
image_resource:
source:
repository: starkandwayne/concourse
type: docker-image
inputs:
- name: bolo
path: release
- name: version-check-script
path: run
params:
CHECK_TYPE: release
GENESIS_CREDS: REDACTED:REDACTED
GENESIS_INDEX: https://genesis.starkandwayne.com
SUBJECT: bolo
platform: linux
run:
args: []
path: ./run/check-version
task: update-index
public: true
serial: false
- name: bosh-aws-cpi
plan:
- get: bosh-aws-cpi
@ -737,6 +765,8 @@ meta:
index: https://genesis.starkandwayne.com
password: REDACTED
username: REDACTED
github:
access_token: REDACTED
resource_types:
- name: script
source:
@ -770,7 +800,7 @@ resources:
exit 1
fi
VERSION=$(cat ${CHECK_TYPE}/version)
VERSION=$(cat ${CHECK_TYPE}/version | sed -e 's/^v//')
echo
echo "Updating the index for ${CHECK_TYPE} ${SUBJECT} v${VERSION}"
@ -790,6 +820,12 @@ resources:
source:
repository: cloudfoundry-community/bind9-boshrelease
type: bosh-io-release
- name: bolo
source:
access_token: REDACTED
repository: bolo-boshrelease
user: cloudfoundry-community
type: github-release
- name: bosh-aws-cpi
source:
repository: cloudfoundry-incubator/bosh-aws-cpi-release

View File

@ -9,12 +9,12 @@ pushd $PIPELINE >/dev/null
rm -rf releases stemcells
mkdir releases stemcells
# FIXME: use the url endpoint (see TODO)
for repo in $(cat track.releases); do
release=${repo##*/}
release=${release%-boshrelease}
release=${release%-release}
cat >releases/${release}.yml <<EOF
for release in $(curl -Lsk ${GENESIS_INDEX}/v1/release | jq -r .[]); do
url=$(curl -Lsk ${GENESIS_INDEX}/v1/release/${release}/metadata | jq -r .url)
if echo $url | grep -q "^https://bosh.io/"; then
repo=${url#https://bosh.io/d/github.com/}
repo=${repo%?v=*}
cat >releases/${release}.yml <<EOF # {{{
---
# auto-generated by pipeline/repipe script
@ -60,10 +60,68 @@ jobs:
CHECK_TYPE: release
SUBJECT: ${release}
EOF
# }}}
elif echo $url | grep -q "^https://github.com/"; then
user=${url#https://github.com/}
user=${user%%/*}
repo=${url#https://github.com/${user}/}
repo=${repo%%/*}
cat >releases/${release}.yml <<EOF # {{{
---
# auto-generated by pipeline/repipe script
groups:
- name: releases
jobs:
- (( append ))
- ${release}
resources:
- name: ${release}
type: github-release
source:
user: ${user}
repository: ${repo}
access_token: (( grab meta.github.access_token ))
jobs:
- name: ${release}
public: true
serial: false
plan:
- get: ${release}
trigger: true
- get: version-check-script
- task: update-index
config:
platform: linux
image_resource:
type: docker-image
source:
repository: starkandwayne/concourse
inputs:
- name: ${release}
path: release
- name: version-check-script
path: run
run:
path: ./run/check-version
args: []
params:
GENESIS_INDEX: (( grab meta.genesis.index ))
GENESIS_CREDS: (( concat meta.genesis.username ":" meta.genesis.password ))
CHECK_TYPE: release
SUBJECT: ${release}
EOF
# }}}
fi
done
for stemcell in $(curl -Lsk ${GENESIS_INDEX}/v1/stemcell | jq -r .[]); do
cat >stemcells/${stemcell}.yml <<EOF
cat >stemcells/${stemcell}.yml <<EOF # {{{
---
# auto-generated by pipeline/repipe script
@ -109,6 +167,7 @@ jobs:
CHECK_TYPE: stemcell
SUBJECT: ${stemcell}
EOF
# }}}
done
trap "rm -f ${PIPELINE}/.deploy.yml" INT QUIT TERM EXIT

2
seed
View File

@ -36,7 +36,7 @@ done
for cpi in aws azure openstack rackhd softlayer vcloud vsphere
do
POST '/v1/release' '{"name":"bosh-'${cpi}'-cpi","url":"https://bosh.io/d/github.com/cloudfoundry-incubator/bosh-'${cpi}'-release?v={{version}}"}'
POST '/v1/release' '{"name":"bosh-'${cpi}'-cpi","url":"https://bosh.io/d/github.com/cloudfoundry-incubator/bosh-'${cpi}'-cpi-release?v={{version}}"}'
done
for release in \