Compare commits
60 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d9cd16f82 | ||
|
|
e8f17b68c4 | ||
|
|
5fe5764dba | ||
| 4186f8b817 | |||
|
|
087fe9f286 | ||
|
|
96a8f98dc4 | ||
| 29d8a41ea5 | |||
|
|
d23774204c | ||
|
|
f590607372 | ||
|
|
f968bf20e9 | ||
|
|
9d606b1a54 | ||
|
|
8be1b6f560 | ||
| 2f94f34e05 | |||
|
|
69aa8633db | ||
|
|
2b7d52ea42 | ||
|
|
726ab13a48 | ||
|
|
606ff924e1 | ||
|
|
5457ba1b6b | ||
|
|
065867da2e | ||
| faee0e8c9d | |||
|
|
2dcee7e4b1 | ||
|
c1107d5390 |
|||
|
|
0f6c882858 | ||
|
|
71f65004d8 | ||
|
|
950193a148 | ||
|
|
6ae099cb81 | ||
|
|
0b466a659d | ||
| 9fed822cc1 | |||
|
|
702da4a01d | ||
|
|
67a5ddec24 | ||
|
|
43008ac60c | ||
|
|
d5565f5bfe | ||
|
|
146a5e1e4b | ||
|
|
bff3d8261d | ||
|
|
a8288fa657 | ||
|
|
1de421aca3 | ||
|
|
e2585c1da4 | ||
|
|
dd421a451c | ||
|
|
17ebca480c | ||
|
|
396bf8ee80 | ||
|
|
105c62d27b | ||
|
|
1e4adbb93e | ||
|
|
ec0b009a92 | ||
|
|
ebf28f3e6c | ||
|
|
bcd9757545 | ||
|
|
4735208cee | ||
|
|
800f3d993e | ||
|
|
873ab7ef35 | ||
|
|
0dde79bc0f | ||
|
|
f7d69e8fcf | ||
|
|
5bdfe5d0e4 | ||
|
|
f046e86b9d | ||
|
|
42a869f057 | ||
|
|
97376e7155 | ||
|
|
9879308883 | ||
|
|
6fe1714a76 | ||
|
|
2be18ba45d | ||
|
|
523b1f2939 | ||
|
|
ecca26e80a | ||
|
|
db00b44a9d |
6 changed files with 286 additions and 60 deletions
111
fedora-iot.conf
111
fedora-iot.conf
|
|
@ -1,25 +1,25 @@
|
||||||
# PRODUCT INFO
|
# PRODUCT INFO
|
||||||
release_name = 'Fedora-IoT'
|
release_name = 'Fedora-IoT'
|
||||||
release_short = 'Fedora-IoT'
|
release_short = 'Fedora-IoT'
|
||||||
release_version = '40'
|
release_version = '46'
|
||||||
# Let's not build install media during this run. For the image builds
|
# Let's not build install media during this run. For the image builds
|
||||||
# and OSTree installer we'll use inputs from other f40 runs.
|
# and OSTree installer we'll use inputs from other f45 runs.
|
||||||
skip_phases = ["buildinstall", "createrepo", "extra_files"]
|
skip_phases = ["buildinstall", "createrepo", "extra_files"]
|
||||||
|
|
||||||
# GENERAL SETTINGS
|
# GENERAL SETTINGS
|
||||||
comps_file = {
|
comps_file = {
|
||||||
'scm': 'git',
|
'scm': 'git',
|
||||||
'repo': 'https://pagure.io/fedora-comps.git',
|
'repo': 'https://forge.fedoraproject.org/releng/fedora-comps.git',
|
||||||
'branch': 'main',
|
'branch': 'main',
|
||||||
'file': 'comps-f40.xml',
|
'file': 'comps-f46.xml',
|
||||||
'command': 'make comps-f40.xml'
|
'command': 'make comps-f46.xml'
|
||||||
}
|
}
|
||||||
variants_file='variants-fedora.xml'
|
variants_file='variants-fedora.xml'
|
||||||
sigkeys = ['a15B79cc']
|
sigkeys = ['91211FCE']
|
||||||
|
|
||||||
# limit tree architectures
|
# limit tree architectures
|
||||||
# if undefined, all architectures from variants.xml will be included
|
# if undefined, all architectures from variants.xml will be included
|
||||||
tree_arches = ['aarch64', 'x86_64']
|
tree_arches = ['aarch64', 'x86_64', "ppc64le", "s390x"]
|
||||||
# limit tree variants
|
# limit tree variants
|
||||||
# if undefined, all variants from variants.xml will be included
|
# if undefined, all variants from variants.xml will be included
|
||||||
tree_variants = ['IoT']
|
tree_variants = ['IoT']
|
||||||
|
|
@ -27,7 +27,7 @@ hashed_directories = True
|
||||||
|
|
||||||
# RUNROOT settings
|
# RUNROOT settings
|
||||||
runroot_channel = 'compose'
|
runroot_channel = 'compose'
|
||||||
runroot_tag = 'f40-build'
|
runroot_tag = 'f46-build'
|
||||||
|
|
||||||
# PKGSET
|
# PKGSET
|
||||||
pkgset_source = 'koji' # koji, repos
|
pkgset_source = 'koji' # koji, repos
|
||||||
|
|
@ -37,7 +37,7 @@ pkgset_source = 'koji' # koji, repos
|
||||||
# pkgset_repos = {}
|
# pkgset_repos = {}
|
||||||
|
|
||||||
# PKGSET - KOJI
|
# PKGSET - KOJI
|
||||||
pkgset_koji_tag = 'f40-iot'
|
pkgset_koji_tag = 'f46-iot'
|
||||||
pkgset_koji_inherit = False
|
pkgset_koji_inherit = False
|
||||||
|
|
||||||
filter_system_release_packages = False
|
filter_system_release_packages = False
|
||||||
|
|
@ -166,7 +166,7 @@ image_volid_layered_product_formats = []
|
||||||
# allow Pungi to tell it what volume ID to use. Note:
|
# allow Pungi to tell it what volume ID to use. Note:
|
||||||
# https://fedoraproject.org/wiki/User:Adamwill/Draft_fedora_image_naming_policy
|
# https://fedoraproject.org/wiki/User:Adamwill/Draft_fedora_image_naming_policy
|
||||||
# '-Workstation-' is a temporary workaround. See
|
# '-Workstation-' is a temporary workaround. See
|
||||||
# https://pagure.io/pungi-fedora/pull-request/525
|
# https://forge.fedoraproject.org/releng/pungi-fedora/pulls/525
|
||||||
volume_id_substitutions = {
|
volume_id_substitutions = {
|
||||||
'Beta': 'B',
|
'Beta': 'B',
|
||||||
'Rawhide': 'rawh',
|
'Rawhide': 'rawh',
|
||||||
|
|
@ -183,7 +183,7 @@ volume_id_substitutions = {
|
||||||
'IoT': 'iot',
|
'IoT': 'iot',
|
||||||
'Jam_KDE': 'Jam',
|
'Jam_KDE': 'Jam',
|
||||||
'MATE_Compiz': 'MATE',
|
'MATE_Compiz': 'MATE',
|
||||||
# Note https://pagure.io/pungi-fedora/issue/533
|
# Note https://forge.fedoraproject.org/releng/pungi-fedora/issues/533
|
||||||
'Python-Classroom': 'Clss',
|
'Python-Classroom': 'Clss',
|
||||||
'Python_Classroom': 'Clss',
|
'Python_Classroom': 'Clss',
|
||||||
'Robotics': 'Robo',
|
'Robotics': 'Robo',
|
||||||
|
|
@ -202,49 +202,56 @@ translate_paths = [
|
||||||
('/mnt/koji/compose/', 'https://kojipkgs.fedoraproject.org/compose/'),
|
('/mnt/koji/compose/', 'https://kojipkgs.fedoraproject.org/compose/'),
|
||||||
]
|
]
|
||||||
|
|
||||||
# These will be inherited by live_media, live_images and image_build
|
# These may be inherited by various phases for creating Koji tasks
|
||||||
global_ksurl = 'git+https://pagure.io/fedora-kickstarts.git?#HEAD'
|
|
||||||
global_release = '!RELEASE_FROM_LABEL_DATE_TYPE_RESPIN'
|
global_release = '!RELEASE_FROM_LABEL_DATE_TYPE_RESPIN'
|
||||||
global_version = '40'
|
global_version = '46'
|
||||||
# live_images ignores this in favor of live_target
|
global_target = 'f46'
|
||||||
global_target = 'f40'
|
|
||||||
|
|
||||||
osbuild = {
|
imagebuilder_target = 'f46-image-builder'
|
||||||
|
imagebuilder = {
|
||||||
"^IoT$": [
|
"^IoT$": [
|
||||||
{
|
{
|
||||||
"name": "%s" % release_name,
|
"name": "%s-raw" % release_name,
|
||||||
"distro": "fedora-40",
|
"types": ["iot-raw-xz"],
|
||||||
"image_types": ["iot-raw-image"],
|
|
||||||
"target": "f%s-candidate" % release_version,
|
|
||||||
"arches": ["x86_64", "aarch64"],
|
"arches": ["x86_64", "aarch64"],
|
||||||
"repo": ["https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Everything/$arch/os/"],
|
"repos": ["https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Everything/$arch/os/"],
|
||||||
"ostree_url": "https://kojipkgs.fedoraproject.org/compose/iot/repo/",
|
"ostree": {
|
||||||
"ostree_ref": "fedora/rawhide/$arch/iot",
|
"url": "https://kojipkgs.fedoraproject.org/compose/iot/repo/",
|
||||||
|
"ref": "fedora/rawhide/$arch/iot",
|
||||||
|
},
|
||||||
"subvariant": "IoT",
|
"subvariant": "IoT",
|
||||||
|
"failable": ["*"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "%s-ostree" % release_name,
|
"name": "%s-ostree" % release_name,
|
||||||
"distro": "fedora-40",
|
"types": ["iot-installer"],
|
||||||
"image_types": ["iot-installer"],
|
|
||||||
"target": "f%s-candidate" % release_version,
|
|
||||||
"arches": ["x86_64", "aarch64"],
|
"arches": ["x86_64", "aarch64"],
|
||||||
"repo": ["https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Everything/$arch/os/"],
|
"repos": ["https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Everything/$arch/os/"],
|
||||||
"ostree_url": "https://kojipkgs.fedoraproject.org/compose/iot/repo/",
|
"ostree": {
|
||||||
"ostree_ref": "fedora/rawhide/$arch/iot",
|
"url": "https://kojipkgs.fedoraproject.org/compose/iot/repo/",
|
||||||
|
"ref": "fedora/rawhide/$arch/iot",
|
||||||
|
},
|
||||||
"subvariant": "IoT",
|
"subvariant": "IoT",
|
||||||
"manifest_type": "dvd-ostree",
|
"manifest_type": "dvd-ostree",
|
||||||
|
"failable": ["*"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "%s" % release_name,
|
"name": "%s-provisioner" % release_name,
|
||||||
"distro": "fedora-40",
|
"types": ["iot-simplified-installer"],
|
||||||
"image_types": ["iot-bootable-container"],
|
|
||||||
"target": "f%s-candidate" % release_version,
|
|
||||||
"arches": ["x86_64", "aarch64"],
|
"arches": ["x86_64", "aarch64"],
|
||||||
"repo": ["https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Everything/$arch/os/"],
|
"repos": ["https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Everything/$arch/os/"],
|
||||||
"ostree_url": "https://kojipkgs.fedoraproject.org/compose/iot/repo/",
|
"ostree": {
|
||||||
"ostree_ref": "fedora/rawhide/$arch/iot",
|
"url": "https://kojipkgs.fedoraproject.org/compose/iot/repo/",
|
||||||
"subvariant": "IoT",
|
"ref": "fedora/rawhide/$arch/iot",
|
||||||
|
},
|
||||||
|
"blueprint": {
|
||||||
|
"customizations": {
|
||||||
|
"installation_device": "/dev/vda1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"subvariant": "IoT_Simplified_Provisioner",
|
||||||
"failable": ["*"],
|
"failable": ["*"],
|
||||||
|
"manifest_type": "dvd-ostree",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
@ -255,7 +262,7 @@ ostree = {
|
||||||
"force_new_commit": True,
|
"force_new_commit": True,
|
||||||
"unified_core": True,
|
"unified_core": True,
|
||||||
"treefile": "fedora-iot.yaml",
|
"treefile": "fedora-iot.yaml",
|
||||||
"config_url": "https://pagure.io/fedora-iot/ostree.git",
|
"config_url": "https://forge.fedoraproject.org/iot/ostree.git",
|
||||||
"config_branch": "main",
|
"config_branch": "main",
|
||||||
"repo": [
|
"repo": [
|
||||||
"IoT",
|
"IoT",
|
||||||
|
|
@ -270,4 +277,30 @@ ostree = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ostree_container = {
|
||||||
|
"^IoT$": [
|
||||||
|
{
|
||||||
|
"version": "!OSTREE_VERSION_FROM_LABEL_DATE_TYPE_RESPIN",
|
||||||
|
"config_url": "https://forge.fedoraproject.org/iot/base-images.git",
|
||||||
|
"config_branch": "main",
|
||||||
|
"treefile": "fedora-rawhide.yaml",
|
||||||
|
"repo": ["https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Everything/$basearch/os/"],
|
||||||
|
"arches": ["x86_64", "aarch64", "ppc64le", "s390x"],
|
||||||
|
"failable": ['*'],
|
||||||
|
"subvariant": "base",
|
||||||
|
"name": "Fedora-base-bootc",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "!OSTREE_VERSION_FROM_LABEL_DATE_TYPE_RESPIN",
|
||||||
|
"config_url": "https://forge.fedoraproject.org/iot/fedora-iot-bootc.git",
|
||||||
|
"config_branch": "main",
|
||||||
|
"treefile": "fedora-iot-rawhide.yaml",
|
||||||
|
"repo": ["https://kojipkgs.fedoraproject.org/compose/rawhide/latest-Fedora-Rawhide/compose/Everything/$basearch/os/"],
|
||||||
|
"arches": ["x86_64", "aarch64"],
|
||||||
|
"failable": ['*'],
|
||||||
|
"name": "Fedora-IoT-bootc",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
koji_profile = 'compose_koji'
|
koji_profile = 'compose_koji'
|
||||||
|
|
|
||||||
14
nightly.sh
14
nightly.sh
|
|
@ -9,9 +9,9 @@ SKIP_PHASES="--skip-phase=productimg"
|
||||||
DEST=$(pwd)
|
DEST=$(pwd)
|
||||||
DATE=$(date "+%Y%m%d")
|
DATE=$(date "+%Y%m%d")
|
||||||
SHORT="Fedora-IoT"
|
SHORT="Fedora-IoT"
|
||||||
RELEASE="40"
|
RELEASE="46"
|
||||||
RELEASE_TITLE="40"
|
RELEASE_TITLE="46"
|
||||||
COMPSFILE="comps-f40.xml"
|
COMPSFILE="comps-f46.xml"
|
||||||
TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`
|
TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`
|
||||||
TOMAIL="iot@lists.fedoraproject.org"
|
TOMAIL="iot@lists.fedoraproject.org"
|
||||||
FROM="Fedora IoT Report <rawhide@fedoraproject.org>"
|
FROM="Fedora IoT Report <rawhide@fedoraproject.org>"
|
||||||
|
|
@ -30,20 +30,20 @@ if [ -d releng ]; then
|
||||||
git pull --rebase
|
git pull --rebase
|
||||||
popd
|
popd
|
||||||
else
|
else
|
||||||
git clone https://pagure.io/releng.git
|
git clone https://forge.fedoraproject.org/releng/tooling.git releng
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set up our fedmsg function, using the releng repo definition
|
# Set up our fedmsg function, using the releng repo definition
|
||||||
#FEDMSG_MODNAME="compose"
|
#FEDMSG_MODNAME="compose"
|
||||||
#FEDMSG_CERTPREFIX="releng"
|
#FEDMSG_CERTPREFIX="releng"
|
||||||
. ./releng/scripts/fedmsg-functions.sh
|
. ./releng/infrastructure/messaging/fedora_messaging.sh
|
||||||
|
|
||||||
# Announce that we are starting, even though we don't know the compose_id yet..
|
# Announce that we are starting, even though we don't know the compose_id yet..
|
||||||
#fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s"}' "$RELEASE" "$ARCH" "$SHORT")
|
#fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s"}' "$RELEASE" "$ARCH" "$SHORT")
|
||||||
#send_fedmsg "${fedmsg_json_start}" ${RELEASE} start
|
#send_fedmsg "${fedmsg_json_start}" ${RELEASE} start
|
||||||
|
|
||||||
#pushd $TMPDIR
|
#pushd $TMPDIR
|
||||||
#git clone https://pagure.io/fedora-comps.git && {
|
#git clone https://forge.fedoraproject.org/releng/fedora-comps.git && {
|
||||||
# pushd fedora-comps
|
# pushd fedora-comps
|
||||||
# make "${COMPSFILE}"
|
# make "${COMPSFILE}"
|
||||||
# cp "${COMPSFILE}" $DEST/
|
# cp "${COMPSFILE}" $DEST/
|
||||||
|
|
@ -67,7 +67,7 @@ fi
|
||||||
NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)
|
NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)
|
||||||
SHORTCOMPOSE_ID=$(echo $NEWCOMPOSE_ID|sed -e 's|Fedora-.*-||g')
|
SHORTCOMPOSE_ID=$(echo $NEWCOMPOSE_ID|sed -e 's|Fedora-.*-||g')
|
||||||
|
|
||||||
./releng/scripts/build_composeinfo "$TARGET_DIR/$NEWCOMPOSE_ID/" --name "$NEWCOMPOSE_ID"
|
./releng/builds/compose/build_composeinfo.py "$TARGET_DIR/$NEWCOMPOSE_ID/" --name "$NEWCOMPOSE_ID"
|
||||||
|
|
||||||
# Set this to use later for a few items include depcheck
|
# Set this to use later for a few items include depcheck
|
||||||
DESTDIR=$TARGET_DIR/$NEWCOMPOSE_ID
|
DESTDIR=$TARGET_DIR/$NEWCOMPOSE_ID
|
||||||
|
|
|
||||||
193
sync-bootc-base-containers.sh
Executable file
193
sync-bootc-base-containers.sh
Executable file
|
|
@ -0,0 +1,193 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sync latest docker image
|
||||||
|
#
|
||||||
|
# Docs in the f_help function
|
||||||
|
f_ctrl_c() {
|
||||||
|
printf "\n*** Exiting ***\n"
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
|
# trap int (ctrl-c)
|
||||||
|
trap f_ctrl_c SIGINT
|
||||||
|
f_help() {
|
||||||
|
cat <<EOF
|
||||||
|
NAME
|
||||||
|
${0}
|
||||||
|
SYNOPSIS
|
||||||
|
${0} FEDORA_RELEASE IMAGE_URL [-s]
|
||||||
|
OPTIONS
|
||||||
|
-s - Sync the stage registries instead of production
|
||||||
|
DESCRIPTION
|
||||||
|
This is a stop-gap solution to identify parent inheritance of container
|
||||||
|
images until the container release automation[0] is in place and we have
|
||||||
|
fully automated rebuilds[1] in OSBS.
|
||||||
|
This information should be used such that the images can be rebuilt and
|
||||||
|
released in the appropriate order using flr-koji.
|
||||||
|
[0] - https://pagure.io/releng-automation
|
||||||
|
[1] - https://osbs.readthedocs.io/en/latest/multiarch.html#chain-rebuilds
|
||||||
|
EXAMPLE
|
||||||
|
${0} 26
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
arch_to_goarch() {
|
||||||
|
local a=$1; shift
|
||||||
|
# See https://github.com/coreos/stream-metadata-go/blob/c5fe1b98ac1b1e6ab62a606b7580dc1f30703f83/arch/arch.go#L14
|
||||||
|
case "$a" in
|
||||||
|
aarch64) echo arm64 ;;
|
||||||
|
x86_64) echo amd64 ;;
|
||||||
|
ppc64le) echo ppc64le ;;
|
||||||
|
s390x) echo s390x ;;
|
||||||
|
*) echo $a ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# This is the release of Fedora that is currently stable, it will define if we
|
||||||
|
# need to move the fedora:latest tag
|
||||||
|
current_stable="44"
|
||||||
|
# Define what is rawhide so we know to push that tag
|
||||||
|
current_rawhide="46"
|
||||||
|
# Sanity checking
|
||||||
|
if ! [[ "${1}" =~ ^-?[0-9]+$ ]];
|
||||||
|
then
|
||||||
|
printf "ERROR: FEDORA_RELEASE missing or invalid\n"
|
||||||
|
f_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# Determine if we want stage or not (yes, I know this should be getops but I
|
||||||
|
# don't want this script to survive so we're doing quick and dirty.
|
||||||
|
#
|
||||||
|
# If ${stage} is a non-zero length string, then perform staging
|
||||||
|
stage=""
|
||||||
|
if [[ "${3}" == "-s" ]]; then
|
||||||
|
printf "INFO: PERFORMING STAGE SYNC\n"
|
||||||
|
stage="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
BASENAMES=("Fedora-IoT-bootc" "Fedora-IoT-bootc-base")
|
||||||
|
format="oci-archive"
|
||||||
|
vers=${1}
|
||||||
|
compose=${2}
|
||||||
|
compdate=`echo ${compose} | cut -c 4-`
|
||||||
|
|
||||||
|
# Obtain the latest build
|
||||||
|
#
|
||||||
|
# Need fXX-updates-canddiate to get actual latest nightly
|
||||||
|
# Can't currently query koji for runroot tasks as they're not tagged
|
||||||
|
#
|
||||||
|
# base_build_nvr=$(koji -q latest-build --type=image f${1}-updates-candidate ${basename} | awk '{print $1}')
|
||||||
|
|
||||||
|
if [[ ${1} -eq "$current_stable" ]]; then
|
||||||
|
tagname="latest"
|
||||||
|
fi
|
||||||
|
if [[ ${1} -eq "$current_rawhide" ]]; then
|
||||||
|
tagname="rawhide"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$stage" ]]; then
|
||||||
|
registries=("registry.fedoraproject.org" "candidate-registry.fedoraproject.org" "quay.io/fedora")
|
||||||
|
else
|
||||||
|
registries=("registry.stg.fedoraproject.org" "candidate-registry.stg.fedoraproject.org")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy a local image to all necessary remote registries
|
||||||
|
copy_image() {
|
||||||
|
local src=$1; shift
|
||||||
|
local name=$1; shift
|
||||||
|
for registry in ${registries[@]}; do
|
||||||
|
skopeo copy $src docker://${registry}/${name}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# From already uploaded architecture-specific images, generate a manifest listed image
|
||||||
|
# on all registries
|
||||||
|
generate_manifest_list() {
|
||||||
|
local name=$1; shift
|
||||||
|
local version=$1; shift
|
||||||
|
for registry in "${registries[@]}"
|
||||||
|
do
|
||||||
|
printf "Push manifest to ${registry}\n"
|
||||||
|
if [ -n "$tagname" ]
|
||||||
|
then
|
||||||
|
printf "tag is set: ${tagname}\n"
|
||||||
|
buildah rmi "${registry}/${name}:${tagname}" || true
|
||||||
|
buildah manifest create "${registry}/${name}:${tagname}"
|
||||||
|
for arch in "${ARCHES[@]}"; do
|
||||||
|
buildah manifest add --arch=$(arch_to_goarch ${arch}) "${registry}/${name}:${tagname}" "docker://${registry}/${name}:${version}-${arch}"
|
||||||
|
done
|
||||||
|
buildah manifest push "${registry}/${name}:${tagname}" "docker://${registry}/${name}:${tagname}" --all
|
||||||
|
fi
|
||||||
|
buildah rmi "${registry}/${name}:${version}" || true
|
||||||
|
buildah manifest create "${registry}/${name}:${version}"
|
||||||
|
for arch in "${ARCHES[@]}"; do
|
||||||
|
buildah manifest add --arch=$(arch_to_goarch ${arch}) "${registry}/${name}:${version}" "docker://${registry}/${name}:${version}-${arch}"
|
||||||
|
done
|
||||||
|
buildah manifest push "${registry}/${name}:${version}" "docker://${registry}/${name}:${version}" --all
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
find_and_copy_images() {
|
||||||
|
local nvr=$1
|
||||||
|
local registry_name=$2
|
||||||
|
local release=$3
|
||||||
|
local name
|
||||||
|
if [[ ${registry_name} = "fedora-bootc" ]] || [[ ${registry_name} = "fedora-iot" ]]; then
|
||||||
|
name=${basename}
|
||||||
|
else
|
||||||
|
printf "Unexpected image type! If we added a new one, it needs mapping here"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# Check that all architectures completed in the build else exit
|
||||||
|
for arch in "${ARCHES[@]}"; do
|
||||||
|
if [ ! -f "/mnt/koji/compose/iot/Fedora-IoT-${release}-${compdate}/compose/${compose_type}/${arch}/images/${basename}-${release}.${compdate}.ociarchive" ]; then
|
||||||
|
echo "One of the expected images are missing, exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
work_dir=$(mktemp -d)
|
||||||
|
pushd ${work_dir} &> /dev/null
|
||||||
|
# Import the image
|
||||||
|
for arch in "${ARCHES[@]}"; do
|
||||||
|
local filename
|
||||||
|
filename="/mnt/koji/compose/iot/Fedora-IoT-${release}-${compdate}/compose/${compose_type}/${arch}/images/${basename}-${release}.${compdate}.ociarchive"
|
||||||
|
copy_image ${format}:${filename} ${registry_name}:${release}-${arch}
|
||||||
|
done
|
||||||
|
|
||||||
|
popd &> /dev/null
|
||||||
|
|
||||||
|
generate_manifest_list ${registry_name} ${release}
|
||||||
|
printf "Removing temporary directory\n"
|
||||||
|
rm -rf $work_dir
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Version should not be higher than rawhide
|
||||||
|
# Either there is a mistake or script is out of date
|
||||||
|
#
|
||||||
|
if [[ ${1} -gt "$current_rawhide" ]]; then
|
||||||
|
printf "ERROR: VERSION HIGHER THAN RAWHIDE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "Syncing compose contailers: ${vers} : ${compose}\n"
|
||||||
|
|
||||||
|
# For fedora-bootc and fedora-iot
|
||||||
|
for basename in "${BASENAMES[@]}"; do
|
||||||
|
if [[ ${basename} = "Fedora-IoT-bootc" ]]; then
|
||||||
|
registry_name="fedora-bootc"
|
||||||
|
compose_type="bootc"
|
||||||
|
ARCHES=("aarch64" "x86_64" "ppc64le" "s390x")
|
||||||
|
elif [[ ${basename} = "Fedora-IoT-bootc-base" ]]; then
|
||||||
|
registry_name="fedora-iot"
|
||||||
|
compose_type="bootc-base"
|
||||||
|
ARCHES=("aarch64" "x86_64")
|
||||||
|
fi
|
||||||
|
base_build_nvr=${basename}-${vers}-${compdate}
|
||||||
|
if [[ -n ${base_build_nvr} ]]; then
|
||||||
|
find_and_copy_images ${base_build_nvr} ${registry_name} ${vers} ${compose}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
@ -12,14 +12,14 @@ DEST=$(pwd)
|
||||||
DATE=$(date "+%Y%m%d")
|
DATE=$(date "+%Y%m%d")
|
||||||
# the Pungi 'shortname', which we will include in fedmsgs for disambiguation
|
# the Pungi 'shortname', which we will include in fedmsgs for disambiguation
|
||||||
SHORT="Fedora-IoT"
|
SHORT="Fedora-IoT"
|
||||||
RELEASE="40"
|
RELEASE="46"
|
||||||
RELEASE_TITLE="40"
|
RELEASE_TITLE="46"
|
||||||
COMPSFILE="comps-f40.xml"
|
COMPSFILE="comps-f46.xml"
|
||||||
TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`
|
TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`
|
||||||
TOMAIL="iot@lists.fedoraproject.org"
|
TOMAIL="iot@lists.fedoraproject.org"
|
||||||
FROM="Fedora IoT Report <branched@fedoraproject.org>"
|
FROM="Fedora IoT Report <branched@fedoraproject.org>"
|
||||||
RSYNCPREFIX="sudo -u ftpsync"
|
RSYNCPREFIX="sudo -u ftpsync"
|
||||||
RSYNCTARGET="/pub/alt/iot/40/"
|
RSYNCTARGET="/pub/alt/iot/46/"
|
||||||
OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)
|
OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)
|
||||||
|
|
||||||
NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)
|
NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,9 @@ DEST=$(pwd)
|
||||||
DATE=$(date "+%Y%m%d")
|
DATE=$(date "+%Y%m%d")
|
||||||
# the Pungi 'shortname', which we will include in fedmsgs for disambiguation
|
# the Pungi 'shortname', which we will include in fedmsgs for disambiguation
|
||||||
SHORT="Fedora-IoT"
|
SHORT="Fedora-IoT"
|
||||||
RELEASE="40"
|
RELEASE="46"
|
||||||
RELEASE_TITLE="40"
|
RELEASE_TITLE="46"
|
||||||
COMPSFILE="comps-f40.xml"
|
COMPSFILE="comps-f46.xml"
|
||||||
TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`
|
TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`
|
||||||
TOMAIL="iot@lists.fedoraproject.org"
|
TOMAIL="iot@lists.fedoraproject.org"
|
||||||
FROM="Fedora IoT Report <rawhide@fedoraproject.org>"
|
FROM="Fedora IoT Report <rawhide@fedoraproject.org>"
|
||||||
|
|
@ -28,13 +28,13 @@ if [ -d releng ]; then
|
||||||
git pull --rebase
|
git pull --rebase
|
||||||
popd
|
popd
|
||||||
else
|
else
|
||||||
git clone https://pagure.io/releng.git
|
git clone https://forge.fedoraproject.org/releng/tooling.git releng
|
||||||
fi
|
fi
|
||||||
# Set up our fedmsg function, using the releng repo definition
|
# Set up our fedmsg function, using the releng repo definition
|
||||||
fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s"}' "$RELEASE" "$ARCH" "$SHORT")
|
fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s"}' "$RELEASE" "$ARCH" "$SHORT")
|
||||||
FEDMSG_MODNAME="compose"
|
FEDMSG_MODNAME="compose"
|
||||||
FEDMSG_CERTPREFIX="releng"
|
FEDMSG_CERTPREFIX="releng"
|
||||||
. ./releng/scripts/fedmsg-functions.sh
|
. ./releng/infrastructure/messaging/fedora_messaging.sh
|
||||||
# Announce that we are starting...
|
# Announce that we are starting...
|
||||||
send_fedmsg "${fedmsg_json_start}" ${RELEASE} start
|
send_fedmsg "${fedmsg_json_start}" ${RELEASE} start
|
||||||
CMD="pungi-koji --notification-script=/usr/bin/pungi-fedmsg-notification --notification-script=pungi-wait-for-signed-ostree-handler --config=$CONFIG --old-composes=$TARGET_DIR $OLD_COMPOSES_DIR $NIGHTLY --label=$LABEL"
|
CMD="pungi-koji --notification-script=/usr/bin/pungi-fedmsg-notification --notification-script=pungi-wait-for-signed-ostree-handler --config=$CONFIG --old-composes=$TARGET_DIR $OLD_COMPOSES_DIR $NIGHTLY --label=$LABEL"
|
||||||
|
|
@ -52,7 +52,7 @@ ostree summary --update --repo=/mnt/koji/compose/iot/repo/
|
||||||
NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)
|
NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)
|
||||||
SHORTCOMPOSE_ID=$(echo $NEWCOMPOSE_ID|sed -e 's|Fedora-.*-||g')
|
SHORTCOMPOSE_ID=$(echo $NEWCOMPOSE_ID|sed -e 's|Fedora-.*-||g')
|
||||||
|
|
||||||
./releng/scripts/build_composeinfo "$TARGET_DIR/$NEWCOMPOSE_ID/" --name "$NEWCOMPOSE_ID"
|
./releng/builds/compose/build_composeinfo.py "$TARGET_DIR/$NEWCOMPOSE_ID/" --name "$NEWCOMPOSE_ID"
|
||||||
|
|
||||||
DESTDIR=$TARGET_DIR/$NEWCOMPOSE_ID
|
DESTDIR=$TARGET_DIR/$NEWCOMPOSE_ID
|
||||||
# Public URL the synced compose will wind up at, we put it in fedmsgs
|
# Public URL the synced compose will wind up at, we put it in fedmsgs
|
||||||
|
|
@ -67,10 +67,8 @@ send_fedmsg "${fedmsg_json_start}" ${RELEASE} rsync.start
|
||||||
for dir in IoT metadata ;
|
for dir in IoT metadata ;
|
||||||
do
|
do
|
||||||
$RSYNCPREFIX rsync -avhH --delete-after $DESTDIR/compose/$dir/ "$RSYNCTARGET/$dir/" ;
|
$RSYNCPREFIX rsync -avhH --delete-after $DESTDIR/compose/$dir/ "$RSYNCTARGET/$dir/" ;
|
||||||
$RSYNCPREFIX ./releng/scripts/build_composeinfo "$RSYNCTARGET/" --name $NEWCOMPOSE_ID
|
$RSYNCPREFIX ./releng/builds/compose/build_composeinfo.py "$RSYNCTARGET/" --name $NEWCOMPOSE_ID
|
||||||
done
|
done
|
||||||
# Tell interested persons that the rsync is done.
|
|
||||||
send_fedmsg "${fedmsg_json_done}" ${RELEASE} rsync.complete
|
|
||||||
# Tell everyone by fedmsg about the compose
|
# Tell everyone by fedmsg about the compose
|
||||||
send_fedmsg "${fedmsg_json_done}" ${RELEASE} complete
|
send_fedmsg "${fedmsg_json_done}" ${RELEASE} complete
|
||||||
SUBJECT='Fedora '$RELEASE' compose report: '$SHORTCOMPOSE_ID' changes'
|
SUBJECT='Fedora '$RELEASE' compose report: '$SHORTCOMPOSE_ID' changes'
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@
|
||||||
<variant id="IoT" name="IoT" type="variant" is_empty="true">
|
<variant id="IoT" name="IoT" type="variant" is_empty="true">
|
||||||
<arches>
|
<arches>
|
||||||
<arch>aarch64</arch>
|
<arch>aarch64</arch>
|
||||||
<arch>x86_64</arch>
|
<arch>x86_64</arch>
|
||||||
|
<arch>ppc64le</arch>
|
||||||
|
<arch>s390x</arch>
|
||||||
</arches>
|
</arches>
|
||||||
</variant>
|
</variant>
|
||||||
</variants>
|
</variants>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue