diff options
author | Mihai Moldovan <ionic@ionic.de> | 2015-03-23 01:14:16 +0100 |
---|---|---|
committer | Mihai Moldovan <ionic@ionic.de> | 2015-03-23 01:14:16 +0100 |
commit | 3e314f3f902e04c45104af516ac02d857b7a65ea (patch) | |
tree | 76a599ab7aa8181f3fed9a62a33ed416b562b59d | |
parent | ecb5ef9f259533ed9829f438010e6d9ada2e7c3f (diff) | |
download | buildscripts-3e314f3f902e04c45104af516ac02d857b7a65ea.tar.gz buildscripts-3e314f3f902e04c45104af516ac02d857b7a65ea.tar.bz2 buildscripts-3e314f3f902e04c45104af516ac02d857b7a65ea.zip |
bin/build-rpm-package: add support for fetching extra repositories. Use RPM_MOCK_CONFIG_DIR, RPM_EXTRA_REPO_MOCK_CONFIG_BASE_NAME and RPM_EXTRA_REPO_MOCK_CONFIG_FULL_NAME in the project buildscripts config to set the necessary values.
-rwxr-xr-x | bin/build-rpm-package | 95 |
1 files changed, 83 insertions, 12 deletions
diff --git a/bin/build-rpm-package b/bin/build-rpm-package index f571cca..6a66ce4 100755 --- a/bin/build-rpm-package +++ b/bin/build-rpm-package @@ -25,13 +25,17 @@ GIT_HOSTNAME="git.mydomain.org" RPMEMAIL="firstname.lastname@mydomain.org" RPMFULLNAME="Firstname Lastname" -GPG_KEY= +GPG_KEY="" RPM_DISTS_SUPPORTED="fedora epel opensuse sle" FEDORA_DISTROS="18,19,20,21,rawhide" EPEL_DISTROS="6,7" OPENSUSE_DISTROS="12.2,12.3,13.1,13.2" SLE_DISTROS="11.2,11.3,12.0" RPM_REPOS_BASE=/var/www/ +RPM_MOCK_CONFIG_DIR="" +RPM_EXTRA_REPO_MOCK_CONFIG_BASE_NAME="" +RPM_EXTRA_REPO_MOCK_CONFIG_FULL_NAME="" + COMPONENT_MAIN="main" COMPONENT_NIGHTLY="nightly" @@ -102,6 +106,64 @@ set_vars() { return 0 } +get_extra_repository () { + TYPE="${1:?"Error: no type passed to ${FUNCNAME}()."}" + DIST="${2:?"Error: no distribution passed to ${FUNCNAME}()"}" + CODENAME="${3:?"Error: no codename (distro 'version') passed to ${FUNCNAME}()"}" + COMPONENT="${4:?"Error: no component (X2Go release group) passed to ${FUNCNAME}()"}" + PACKAGE="${5:?"Error: no package passed to ${FUNCAME}()"}" + ARCH="${6:?"Error: no architecture passed to ${FUNCNAME}()"}" + + ret="" + # Note: we always add the extras repo, because that's defined as "packages missing from the main repository". + case "${TYPE}" in + "suse") + ret="--repo http://${REPOS_SERVER}/${DIST}/${CODENAME}/extras/${ARCH}" + if [ -z "${PACKAGE_WITHOUT_OTHERMIRROR}" ] || [ "${PACKAGE_WITHOUT_OTHERMIRROR}" != "${PACKAGE}" ]; then + ret="${ret} --repo http://${REPOS_SERVER}/${DIST}/${CODENAME}/${COMPONENT}/${ARCH}" + fi + ;; + "redhat") + # Always use -r. + ret="-r " + if [ -n "${RPM_MOCK_CONFIG_DIR}" ]; then + # Add config base dir if specified. + ret="${ret} ${RPM_MOCK_CONFIG_DIR}" + + # Mock config file names shall follow the format: + # distname-distversion-arch[-extra_repo_base_name[-extra_repo_full_name]] + # ^------ mandatory ------^^----------------- optional -----------------^ + # ^------- default -------^^---- for extras ----^^--- for everything ---^ + + # Add mandatory, default value. + ret="${ret} ${DIST}-${CODENAME}-${ARCH}" + if [ -n "${RPM_EXTRA_REPO_MOCK_CONFIG_BASE_NAME}" ]; then + ret="${ret}-${RPM_EXTRA_REPO_MOCK_CONFIG_BASE_NAME}" + + if [-n "${RPM_EXTRA_REPO_MOCK_CONFIG_FULL_NAME}" ] && [ -z "${PACKAGE_WITHOUT_OTHERMIRROR}" ] || \ + [ "${PACKAGE_WITHOUT_OTHERMIRROR}" != "${PACKAGE}" ]; then + ret="${ret}-${RPM_EXTRA_REPO_MOCK_CONFIG_FULL_NAME}" + fi + fi + + # Add .cfg extension. + ret="${ret}.cfg" + else + # As the default directory /etc/mock is non-writable, assume we don't have + # special mock configs. + ret="${ret} ${DIST}-${CODENAME}-${ARCH}" + fi + ;; + *) + echo "Error: unknown type passed to ${FUNCNAME}()" >&2 + echo "Valid values: suse, redhat." >&2 + exit -1 + ;; + esac + + echo "${ret}" +} + prepare_workspace() { # make sure our local working copy is up to date... if [ -d "$PROJECT_DIR/.git" ]; then @@ -224,8 +286,11 @@ build_packages() { sleep 30 done rm -f $PKGDIST/$l_DIST/$l_CODENAME/x86_64/build.log + + # Obtain packages from our RPM repository. + MOCK_CHROOT_CONFIG="$(get_extra_repository "redhat" "${l_DIST}" "${l_CODENAME}" "${COMPONENT}" "${PROJECT}" "x86_64")" if mock --buildsrpm \ - -r ${l_DIST}-${l_CODENAME}-x86_64 \ + ${MOCK_CHROOT_CONFIG} \ --resultdir="$PKGDIST/$l_DIST/$l_CODENAME/rpmbuild/SRPMS" \ --spec "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/rpmbuild/SOURCES/$PROJECT.spec" \ --sources "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/rpmbuild/SOURCES/"; then @@ -246,14 +311,6 @@ build_packages() { mkdir -p $PKGDIST/$l_DIST/$l_CODENAME/{x86_64,i386,SRPM} - # TODO: obtain packages from our YUM repository??? - #OTHERMIRROR="" - #if [ "x$COMPONENT" = "x$COMPONENT_NIGHTLY" ]; then - # echo $PACKAGE_WITHOUT_OTHERMIRROR | grep $PROJECT >/dev/null || OTHERMIRROR="deb http://$REPOS_SERVER/$l_DIST $l_CODENAME $COMPONENT_MAIN $COMPONENT" - #else - # echo $PACKAGE_WITHOUT_OTHERMIRROR | grep $PROJECT >/dev/null || OTHERMIRROR="deb http://$REPOS_SERVER/$l_DIST $l_CODENAME $COMPONENT" - #fi - if [ "x$SKIP_ARCH" != "xx86_64" ] || [ "$IS_NOARCH" = "yes" ]; then if [ "x$l_DIST" = "xopensuse" ] || [ "x$l_DIST" = "xsle" ]; then BUILD_RESULT=/home/abuild/rpmbuild/ @@ -269,10 +326,14 @@ build_packages() { echo "Waiting for some other build to finish..." sleep 30 done + + # Obtain packages from our RPM repository. + OTHERMIRROR="$(get_extra_repository "suse" "${l_DIST}" "${l_CODENAME}" "${COMPONENT}" "${PROJECT}" "x86_64")" if sudo obs-build \ --nosignature \ --repo "http://packages.x2go.org/${l_DIST}/$l_CODENAME/extras" \ --repo "$DOWNLOAD_URL" \ + ${OTHERMIRROR} \ --root "/var/cache/obs-build/$l_DIST/$l_CODENAME/x86_64/" \ --clean \ $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/rpmbuild/SOURCES/$PROJECT.spec; then @@ -297,8 +358,11 @@ build_packages() { echo "Waiting for some other build to finish..." sleep 30 done + + # Obtain packages from our RPM repository. + MOCK_CHROOT_CONFIG="$(get_extra_repository "redhat" "${l_DIST}" "${l_CODENAME}" "${COMPONENT}" "${PROJECT}" "x86_64")" ls $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/rpmbuild/SRPMS/$PROJECT-$UPSTREAM_VERSION-$PKG_SRCRELEASE.$IS_RELEASE.git$DATE.$GITREV.$COMPONENT.*.src.rpm | while read srpm; do - if mock -r "${l_DIST}-${l_CODENAME}-x86_64" --resultdir="$PKGDIST/$l_DIST/$l_CODENAME/x86_64" "$srpm"; then + if mock ${MOCK_CHROOT_CONFIG} --resultdir="$PKGDIST/$l_DIST/$l_CODENAME/x86_64" "$srpm"; then # copy and later sign source RPM cp "$srpm" "$PKGDIST/$l_DIST/$l_CODENAME/SRPM/" @@ -340,10 +404,14 @@ build_packages() { echo "Waiting for some other build to finish..." sleep 30 done + + # Obtain packages from our RPM repository. + OTHERMIRROR="$(get_extra_repository "suse" "${l_DIST}" "${l_CODENAME}" "${COMPONENT}" "${PROJECT}" "i386")" if linux32 sudo obs-build \ --nosignature \ --repo "http://packages.x2go.org/${l_DIST}/$l_CODENAME/extras" \ --repo "$DOWNLOAD_URL" \ + ${OTHERMIRROR} \ --root "/var/cache/obs-build/$l_DIST/$l_CODENAME/i386/" \ --clean \ $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/rpmbuild/SOURCES/$PROJECT.spec; then @@ -371,8 +439,11 @@ build_packages() { sleep 30 done rm -f $PKGDIST/$l_DIST/$l_CODENAME/i386/build.log + + # Obtain packages from our RPM repository. + MOCK_CHROOT_CONFIG="$(get_extra_repository "redhat" "${l_DIST}" "${l_CODENAME}" "${COMPONENT}" "${PROJECT}" "i386")" ls $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/rpmbuild/SRPMS/$PROJECT-$UPSTREAM_VERSION-$PKG_SRCRELEASE.$IS_RELEASE.git$DATE.$GITREV.$COMPONENT.*.src.rpm | while read srpm; do - if nice mock -r "${l_DIST}-${l_CODENAME}-i386" --resultdir="$PKGDIST/$l_DIST/$l_CODENAME/i386" "$srpm"; then + if nice mock ${MOCK_CHROOT_CONFIG} --resultdir="$PKGDIST/$l_DIST/$l_CODENAME/i386" "$srpm"; then # only copy and sign source RPM if necessary SIGN_SRPM=0 if [ ! -e "$PKGDIST/$l_DIST/$l_CODENAME/SRPM/$(basename "$srpm")" ]; then |