#!/bin/bash

# This is the build script used by our copr repository at
#   https://copr.fedorainfracloud.org/coprs/networkmanager
#
# On a new upstream release, add new copr jobs named "NetworkManager-X.Y" and
# "NetworkManager-X.Y-debug".
#
#   - best, look at the latest copr project and replicate the settings.
#   - add a custom build with the following script:
#
#        #!/bin/bash
#        export GIT_REF=nm-$X-$Y
#        export DEBUG=0/1
#        export LTO=
#        curl https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/raw/main/contrib/scripts/nm-copr-build.sh | bash
#
#   - for certain CentOS/EPEL you need to add https://copr.fedorainfracloud.org/coprs/nmstate/nm-build-deps/
#     as build chroot. See under "Settings/Project Details" for the latest copr project.
#   - go to "Settings/Integrations" and find the notification URL for the project. Then
#     go to https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/hooks and add
#     a push event for the "nm-$X-$Y" branch.
#
# environment variables for this script:
# - GIT_REF: the ref that should be build. Can be "main" or a git sha.
# - DEBUG: set to 1 to build "--with debug". Otherwise the default is a release
#     build.
# - LTO: set to 1/0 to build "--with/--without lto", otherwise the default depends
#     on the distribution.
# - NM_GIT_BUNDLE: set to a HTTP url where to fetch the nm-git-bundle-*.noarch.rpm
#     from. Set to empty to skip it. By default, it fetches the bundle from copr.
#     See "contrib/scripts/nm-copr-build-nm-git-bundle.sh" script and
#     https://copr.fedorainfracloud.org/coprs/networkmanager/NetworkManager-main/package/nm-git-bundle/

set -ex

if [[ "$DEBUG" == 1 ]]; then
    DEBUG="--with debug"
else
    DEBUG="--without debug"
fi

if [ "$LTO" = 0 ]; then
    LTO='--without lto'
elif [ "$LTO" = 1 ]; then
    LTO='--with lto'
else
    LTO=
fi

if [[ -z "$GIT_REF" ]]; then
    echo "\$GIT_REF is not set!"
    exit 1
fi

mkdir NetworkManager
pushd NetworkManager
git init .

git remote add origin https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
git remote add --no-tags github https://github.com/NetworkManager/NetworkManager

get_nm_git_bundle() {
    # try to fetch the refs from nm-git-bundle.
    #
    # This script runs in copr infrastructure to create the SRPM.
    # The idea is that this URL is close and downloading it is cheaper
    # than fetching everything from upstream git.
    if [ -z "$NM_GIT_BUNDLE" ]; then
        if [ -n "${NM_GIT_BUNDLE+x}" ]; then
            return 0
        fi
        NM_GIT_BUNDLE='https://download.copr.fedorainfracloud.org/results/networkmanager/NetworkManager-main/fedora-41-x86_64/08367599-nm-git-bundle/nm-git-bundle-20241209-150540.noarch.rpm'
    fi
    mkdir nm-git-bundle
    pushd nm-git-bundle
    if ! time curl --fail -o nm-git-bundle.rpm "$NM_GIT_BUNDLE"; then
        # The bundle is only a fetch speed-up; fall back to the git fetch below.
        echo "nm-git-bundle unavailable at $NM_GIT_BUNDLE, falling back to upstream git fetch" >&2
        popd
        return 0
    fi
    rpm2cpio nm-git-bundle.rpm | cpio -idmv
    popd
    git remote add nm-git-bundle "$PWD/nm-git-bundle/usr/share/NetworkManager/nm-git-bundle.git"
    git fetch nm-git-bundle
}

get_nm_git_bundle
git fetch github
git fetch origin
git remote remove nm-git-bundle || true

GIT_SHA="$(git show-ref --verify --hash "$GIT_REF" 2>/dev/null ||
           git show-ref --verify --hash "refs/remotes/origin/$GIT_REF" 2>/dev/null ||
           git rev-parse --verify "refs/remotes/origin/$GIT_REF" 2>/dev/null ||
           git rev-parse --verify "$GIT_REF^{commit}" 2>/dev/null)"

git checkout -b tmp "$GIT_SHA"

./contrib/fedora/rpm/build_clean.sh -g -S -w test $DEBUG $LTO -s copr
popd

mv ./NetworkManager/contrib/fedora/rpm/latest/{SOURCES,SPECS}/* .
rm -rf ./NetworkManager
