303 lines
11 KiB
Plaintext
303 lines
11 KiB
Plaintext
---
|
|
format_version: 3
|
|
pipelines:
|
|
<% stagings = %w(A B C D E F G H S V Y) -%>
|
|
SUSE.SLFO.Main.Staging.Weekly.Freeze:
|
|
environment_variables:
|
|
SLFO_PROJECT: SUSE:SLFO:Main
|
|
SLFO_RING_1_PROJECT: SUSE:SLFO:Main:Staging:Rings:1-MinimalX
|
|
STAGING_API: https://api.suse.de
|
|
OSC_CONFIG: /home/go/config/oscrc-staging-bot
|
|
group: SLFO.Stagings
|
|
lock_behavior: unlockWhenFinished
|
|
timer:
|
|
spec: "0 0 0-23 ? * SUN"
|
|
materials:
|
|
scripts:
|
|
auto_update: true
|
|
git: https://github.com/openSUSE/openSUSE-release-tools.git
|
|
whitelist:
|
|
- DO_NOT_TRIGGER
|
|
stages:
|
|
- Check.Ring.1.Finished:
|
|
timeout: 50
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
set -eu
|
|
status="$(osc -A $STAGING_API api /build/$SLFO_RING_1_PROJECT/standard/x86_64?view=status | grep 'code=' | sed -E 's/^.*code="(.*)".*$/\1/')"
|
|
echo $SLFO_RING_1_PROJECT status: "${status}"
|
|
if printf '%s' "${status}" | grep -q finished; then
|
|
exit 0
|
|
else
|
|
exit 1
|
|
fi
|
|
- Freeze.stagings:
|
|
## 6 hours (at most 30 minutes per staging)
|
|
timeout: 360
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
set -eu
|
|
export PYTHONPATH=$PWD
|
|
|
|
## Setup osc staging plugin
|
|
tempdir=$(mktemp -d)
|
|
mkdir -p $tempdir/.osc-plugins
|
|
ln -s $PWD/osc-staging.py $tempdir/.osc-plugins
|
|
ln -s $PWD/osclib $tempdir/.osc-plugins
|
|
export HOME=$tempdir
|
|
|
|
for letter in <% stagings.each do |letter| %><%= letter %> <% end -%>; do
|
|
## if the staging was frozen today, skip it
|
|
if ! osc -A $STAGING_API meta attribute "${SLFO_PROJECT}:Staging:${letter}" --attribute OSRT:FreezeTime | grep $(date +%Y-%m-%d); then
|
|
osc -A $STAGING_API staging freeze -p $SLFO_PROJECT $letter
|
|
else
|
|
echo "${SLFO_PROJECT}:Staging:${letter}" was frozen today, skipping it...
|
|
fi
|
|
done
|
|
## Tear down osc staging plugin
|
|
rm -rf $tempdir
|
|
<% stagings.each do |letter| %>
|
|
SUSE.SLFO.Main.Staging.<%= letter %>:
|
|
environment_variables:
|
|
STAGING_PROJECT: SUSE:SLFO:Main:Staging:<%= letter %>
|
|
STAGING_API: https://api.suse.de
|
|
OSC_CONFIG: /home/go/config/oscrc-staging-bot
|
|
group: SLFO.Stagings
|
|
lock_behavior: unlockWhenFinished
|
|
materials:
|
|
stagings:
|
|
git: git://botmaster.suse.de/suse-repos.git
|
|
auto_update: true
|
|
destination: repos
|
|
whitelist:
|
|
- SUSE:SLFO:Main:Staging:<%= letter %>_-_standard.yaml
|
|
scripts:
|
|
auto_update: true
|
|
git: https://github.com/openSUSE/openSUSE-release-tools.git
|
|
whitelist:
|
|
- DO_NOT_TRIGGER
|
|
destination: scripts
|
|
stages:
|
|
- Checks:
|
|
jobs:
|
|
Check.Build.Succeeds:
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
export PYTHONPATH=$PWD/scripts
|
|
cd scripts/gocd
|
|
./report-status.py -A $STAGING_API -p $STAGING_PROJECT -n packagelists -r standard -s pending
|
|
./verify-repo-built-successful.py -A $STAGING_API -p $STAGING_PROJECT -r standard
|
|
Repo.Checker:
|
|
environment_variables:
|
|
OSC_CONFIG: /home/go/config/oscrc-staging-bot
|
|
resources:
|
|
- repo-checker
|
|
tasks:
|
|
- script: |-
|
|
./scripts/staging-installcheck.py -A $STAGING_API -p SUSE:SLFO:Main -s $STAGING_PROJECT
|
|
|
|
- Update.000product:
|
|
resources:
|
|
- repo-checker
|
|
tasks:
|
|
- script: |-
|
|
export PYTHONPATH=$PWD/scripts
|
|
cd scripts/gocd
|
|
|
|
if ../pkglistgen.py --debug -A $STAGING_API update_and_solve --engine product_composer --staging $STAGING_PROJECT --force; then
|
|
./report-status.py -A $STAGING_API -p $STAGING_PROJECT -n packagelists -r standard -s success
|
|
else
|
|
./report-status.py -A $STAGING_API -p $STAGING_PROJECT -n packagelists -r standard -s failure
|
|
exit 1
|
|
fi
|
|
|
|
- Build.product:
|
|
timeout: 180
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
minutes=0
|
|
osc -A $STAGING_API api -X POST "/source/$STAGING_PROJECT?cmd=remove_flag&repository=product&flag=build"
|
|
export PYTHONPATH=$PWD/scripts
|
|
while ./scripts/gocd/verify-repo-built-successful.py -A $STAGING_API -p $STAGING_PROJECT -r product; ret=$?; [ ${ret} -ne 0 ]; do
|
|
if [ ${ret} -eq 2 ]; then
|
|
echo "product repository not found. Project configuration issue?" >&2
|
|
exit 1
|
|
elif [ ${minutes} -gt 180 ]; then
|
|
echo "Product is still failing after timeout, exiting..." >&2
|
|
exit 1
|
|
fi
|
|
sleep 60
|
|
minutes=$(expr $minutes + 1)
|
|
done
|
|
|
|
- Enable.images.repo:
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
osc -A $STAGING_API api -X POST "/source/$STAGING_PROJECT?cmd=remove_flag&repository=images&flag=build"
|
|
export PYTHONPATH=$PWD/scripts
|
|
while osc -A $STAGING_API api "/build/$STAGING_PROJECT/_result?view=summary&repository=images" | grep 'dirty=.true.'; do
|
|
sleep 60
|
|
done
|
|
./scripts/gocd/report-status.py -A $STAGING_API -p $STAGING_PROJECT -n images:enabled -r standard -s success
|
|
<% end -%>
|
|
<% stagings = %w(A B C D E F G H S V Y) -%>
|
|
SUSE.SLFO.1.1.Staging.Weekly.Freeze:
|
|
environment_variables:
|
|
SLFO_1_1_PROJECT: SUSE:SLFO:1.1
|
|
SLFO_1_1_RING_1_PROJECT: SUSE:SLFO:1.1:Staging:Rings:1-MinimalX
|
|
STAGING_API: https://api.suse.de
|
|
OSC_CONFIG: /home/go/config/oscrc-staging-bot
|
|
group: SLFO.1.1.Stagings
|
|
lock_behavior: unlockWhenFinished
|
|
timer:
|
|
spec: "0 0 0-23 ? * SUN"
|
|
materials:
|
|
scripts:
|
|
auto_update: true
|
|
git: https://github.com/openSUSE/openSUSE-release-tools.git
|
|
whitelist:
|
|
- DO_NOT_TRIGGER
|
|
stages:
|
|
- Check.Ring.1.Finished:
|
|
timeout: 50
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
set -eu
|
|
status="$(osc -A $STAGING_API api /build/$SLFO_1_1_RING_1_PROJECT/standard/x86_64?view=status | grep 'code=' | sed -E 's/^.*code="(.*)".*$/\1/')"
|
|
echo $SLFO_1_1_RING_1_PROJECT status: "${status}"
|
|
if printf '%s' "${status}" | grep -q finished; then
|
|
exit 0
|
|
else
|
|
exit 1
|
|
fi
|
|
- Freeze.stagings:
|
|
## 6 hours (at most 30 minutes per staging)
|
|
timeout: 360
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
set -eu
|
|
export PYTHONPATH=$PWD
|
|
|
|
## Setup osc staging plugin
|
|
tempdir=$(mktemp -d)
|
|
mkdir -p $tempdir/.osc-plugins
|
|
ln -s $PWD/osc-staging.py $tempdir/.osc-plugins
|
|
ln -s $PWD/osclib $tempdir/.osc-plugins
|
|
export HOME=$tempdir
|
|
|
|
for letter in <% stagings.each do |letter| %><%= letter %> <% end -%>; do
|
|
## if the staging was frozen today, skip it
|
|
if ! osc -A $STAGING_API meta attribute "${SLFO_1_1_PROJECT}:Staging:${letter}" --attribute OSRT:FreezeTime | grep $(date +%Y-%m-%d); then
|
|
osc -A $STAGING_API staging freeze -p $SLFO_1_1_PROJECT $letter
|
|
else
|
|
echo "${SLFO_1_1_PROJECT}:Staging:${letter}" was frozen today, skipping it...
|
|
fi
|
|
done
|
|
## Tear down osc staging plugin
|
|
rm -rf $tempdir
|
|
<% stagings.each do |letter| %>
|
|
SUSE.SLFO.1.1.Staging.<%= letter %>:
|
|
environment_variables:
|
|
SLFO_1_1_PROJECT: SUSE:SLFO:1.1
|
|
STAGING_PROJECT: SUSE:SLFO:1.1:Staging:<%= letter %>
|
|
STAGING_API: https://api.suse.de
|
|
OSC_CONFIG: /home/go/config/oscrc-staging-bot
|
|
group: SLFO.1.1.Stagings
|
|
lock_behavior: unlockWhenFinished
|
|
materials:
|
|
stagings:
|
|
git: git://botmaster.suse.de/suse-repos.git
|
|
auto_update: true
|
|
destination: repos
|
|
whitelist:
|
|
- SUSE:SLFO:1.1:Staging:<%= letter %>_-_standard.yaml
|
|
scripts:
|
|
auto_update: true
|
|
git: https://github.com/openSUSE/openSUSE-release-tools.git
|
|
whitelist:
|
|
- DO_NOT_TRIGGER
|
|
destination: scripts
|
|
stages:
|
|
- Checks:
|
|
jobs:
|
|
Check.Build.Succeeds:
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
export PYTHONPATH=$PWD/scripts
|
|
cd scripts/gocd
|
|
./report-status.py -A $STAGING_API -p $STAGING_PROJECT -n packagelists -r standard -s pending
|
|
./verify-repo-built-successful.py -A $STAGING_API -p $STAGING_PROJECT -r standard
|
|
Repo.Checker:
|
|
environment_variables:
|
|
OSC_CONFIG: /home/go/config/oscrc-staging-bot
|
|
resources:
|
|
- repo-checker
|
|
tasks:
|
|
- script: |-
|
|
./scripts/staging-installcheck.py -A $STAGING_API -p $SLFO_1_1_PROJECT -s $STAGING_PROJECT
|
|
|
|
- Update.000product:
|
|
resources:
|
|
- repo-checker
|
|
tasks:
|
|
- script: |-
|
|
export PYTHONPATH=$PWD/scripts
|
|
cd scripts/gocd
|
|
|
|
if ../pkglistgen.py --debug -A $STAGING_API update_and_solve --engine product_composer --staging $STAGING_PROJECT --force; then
|
|
./report-status.py -A $STAGING_API -p $STAGING_PROJECT -n packagelists -r standard -s success
|
|
else
|
|
./report-status.py -A $STAGING_API -p $STAGING_PROJECT -n packagelists -r standard -s failure
|
|
exit 1
|
|
fi
|
|
|
|
- Build.product:
|
|
timeout: 180
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
minutes=0
|
|
osc -A $STAGING_API api -X POST "/source/$STAGING_PROJECT?cmd=remove_flag&repository=product&flag=build"
|
|
export PYTHONPATH=$PWD/scripts
|
|
while ./scripts/gocd/verify-repo-built-successful.py -A $STAGING_API -p $STAGING_PROJECT -r product; ret=$?; [ ${ret} -ne 0 ]; do
|
|
if [ ${ret} -eq 2 ]; then
|
|
echo "product repository not found. Project configuration issue?" >&2
|
|
exit 1
|
|
elif [ ${minutes} -gt 180 ]; then
|
|
echo "Product is still failing after timeout, exiting..." >&2
|
|
exit 1
|
|
fi
|
|
sleep 60
|
|
minutes=$(expr $minutes + 1)
|
|
done
|
|
|
|
- Enable.images.repo:
|
|
resources:
|
|
- staging-bot
|
|
tasks:
|
|
- script: |-
|
|
osc -A $STAGING_API api -X POST "/source/$STAGING_PROJECT?cmd=remove_flag&repository=images&flag=build"
|
|
export PYTHONPATH=$PWD/scripts
|
|
while osc -A $STAGING_API api "/build/$STAGING_PROJECT/_result?view=summary&repository=images" | grep 'dirty=.true.'; do
|
|
sleep 60
|
|
done
|
|
./scripts/gocd/report-status.py -A $STAGING_API -p $STAGING_PROJECT -n images:enabled -r standard -s success
|
|
<% end -%>
|