--- 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=1 osc -A $STAGING_API api -X POST "/source/$STAGING_PROJECT?cmd=remove_flag&repository=product&flag=build" export PYTHONPATH=$PWD/scripts ## Let the scheduler warm up first sleep 60 while osc -A $STAGING_API api -X GET "/build/$STAGING_PROJECT/_result?view=summary&repository=product&arch=local" | grep -E 'statuscount code="(blocked|scheduled|building)"'; do if [ ${minutes} -gt 180 ]; then echo "Product is still building after timeout, exiting..." >&2 exit 1 fi sleep 60 minutes=$(expr $minutes + 1) done ## Always fail on broken/failed products if osc -A $STAGING_API api -X GET "/build/$STAGING_PROJECT/_result?view=summary&repository=product&arch=local" | grep -qE 'statuscount code="(broken|failed)"'; then echo "Some products failed to build, exiting..." >&2 exit 1 fi - 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 I J K L M N O P Q R S T U V W X Y Z) -%> <% 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 - 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 -%>