| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | 
							- #!/bin/bash
 - 
 - warn() {
 -     echo "$1" >&2
 - }
 - 
 - die() {
 -     warn "fatal: $1"
 -     exit 3
 - }
 - 
 - usage() {
 -     warn "usage: $0 [options] MODE"
 -     warn ""
 -     warn "Options:"
 -     warn ""
 -     warn "  -b BRN  build from branch BRN (default: last tag)"
 -     warn "  -c COPR_PROJECT  COPR project name"
 -     warn "  -n      dry mode, don't do anything (just show"
 -     warn "          what would be done)"
 -     warn "  -r REL  use REL as Release number in SPEC file"
 -     warn "  -v VER  use VER as Version number in SPEC file"
 -     warn "  -u URL  use URL as base (to get last tag and"
 -     warn "          compose Source0 in SPEC file)"
 -     warn ""
 -     warn "If -b is not used, build is launched from last tag available"
 -     warn "in the GitHub repo.  In that case, Release is '1' and Version"
 -     warn "is deduced from the tag by removing the initial 'v'."
 -     warn ""
 -     warn "If -b is used, the project repo is temporarily cloned, and"
 -     warn "both Version and Release are found by consulting git-describe"
 -     warn "on the specified branch."
 -     warn ""
 -     warn "If MODE is 'scratch' (default), Release is pre-fixed by string"
 -     warn "'0.scratch.' and build is triggered in scratch COPR project."
 -     exit 2
 - }
 - 
 - last_version() {
 -     git ls-remote --tag "$UrlBase" \
 -       | grep '/tags/' \
 -       | cut -d/ -f3 \
 -       | sort -V \
 -       | tail -1 \
 -       | sed "s/^v//"
 - }
 - 
 - mkspec() {
 -     local self_version
 -     local cl_date
 -     self_version="slop-build-copr $(git describe --tags)"
 -     cl_date=$(LC_ALL=C date +"%a %b %d %Y")
 -     sed -e "
 -         s|__SLOP_VERSION__|$Version|
 -         s|__SLOP_RELEASE__|$Release|
 -         s|__SLOP_URLBASE__|$UrlBase|
 -         s|__SLOP_BUILDSCRIPT_VERSION__|$self_version|
 -         s|__SLOP_DATE__|$cl_date|
 -     " <slop.spec.in
 - }
 - 
 - git_guess() {
 -     #
 -     # Print git-guessed $1
 -     #
 -     local what=$1   # what we want (ver|rel)
 -     local describe  # full git-describe output
 -     local xtra=     # extra part (-N-gHASH)
 -     local num=0     # num. of commits since tag (N)
 -     local sha=      # '.g'+sha1 of this commit (gHASH)
 -     describe=$(git describe --tags --always HEAD)
 -     case $describe in
 -         *-*)                        #     v1.2.3-21-g654cba
 -             tag=${describe%%-*}     # tag=v1.2.3
 -             xtra=${describe#$tag-}  # xtra=-21-g654cba
 -             num=${xtra%%-*}         # num=21
 -             sha=.${xtra#$num-}      # sha=.g654cba
 -             ;;
 -         *)
 -             tag=$describe
 -             ;;
 -     esac
 -     case $what in
 -         ver)    echo "${tag#v}"         ;;
 -         rel)    echo "$((num + 1))$sha" ;;
 -     esac
 - }
 - 
 - choose_copr() {
 -     #
 -     # Choose COPR project based on $Mode
 -     #
 -     case $Mode in
 -         scratch) echo amahdal/slop-scratch ;;
 -         main)    echo amahdal/slop         ;;
 -     esac
 - }
 - 
 - choose_urlbase() {
 -     #
 -     # Choose COPR project based on $Mode
 -     #
 -     case $Mode in
 -         scratch) echo https://github.com/AloisMahdal/slop ;;
 -         main)    echo https://github.com/naelstrof/slop ;;
 -     esac
 - }
 - 
 - choose_relpfx() {
 -     #
 -     # Choose COPR project based on $Mode
 -     #
 -     test "$Mode" == scratch && echo 0.scratch.
 -     return 0
 - }
 - 
 - main() {
 -     local Version       # Version in SPEC file
 -     local Release       # Release in SPEC file
 -     local CoprProject   # COPR project
 -     local UrlBase       # GitHub URL base
 -     local Tmp           # our temp
 -     local Branch        # branch to use, if empty, tags are considered
 -     local DryRun=false  # do not do anything
 -     local Mode=scratch  # implies COPR project and release prefix
 -     which copr >/dev/null \
 -      || die "copr not found, try 'sudo install copr-cli'"
 -     Tmp=$(mktemp -d)
 -     while true; do case $1 in
 -         -b) Branch=$2;      shift 2 || usage ;;
 -         -c) CoprProject=$2; shift 2 || usage ;;
 -         -u) UrlBase=$2;     shift 2 || usage ;;
 -         -r) Release=$2;     shift 2 || usage ;;
 -         -v) Version=${2#v}; shift 2 || usage ;;
 -         -n) DryRun=true;    shift ;;
 -         -*) usage ;;
 -         *)  break ;;
 -     esac done
 -     Mode=${1:-$Mode}
 -     case $Mode in
 -         main|scratch) : ;;
 -         *)            usage ;;
 -     esac
 -     test -n "$CoprProject" || CoprProject=$(choose_copr)
 -     test -n "$UrlBase"     || UrlBase=$(choose_urlbase)
 -     if test -n "$Branch"; then
 -         die "not implemented"
 -         test -n "$Version" || Version=$(git_guess ver)
 -         test -n "$Release" || Release=$(git_guess rel)
 -     else
 -         test -n "$Version" || Version=$(last_version)
 -         test -n "$Release" || Release=1
 -     fi
 -     Release=$(choose_relpfx)$Release
 -     mkspec >"$Tmp/slop.spec"
 -     $DryRun && {
 -         warn "dry mode active, we would build:"
 -         warn "    at $CoprProject"
 -         test -n "$Branch" && warn "    using branch $Branch"
 -         test -n "$Branch" || warn "    using last tag"
 -         warn "    from $UrlBase"
 -         warn "    yielding slop-$Version-$Release.*.rpm"
 -         warn ""
 -         warn "===== BEGIN slop.spec ====="
 -         cat "$Tmp/slop.spec"
 -         warn "===== END slop.spec ====="
 -         exit 1
 -     }
 -     copr build "$CoprProject" "$Tmp/slop.spec"
 -     rm -rf "$Tmp"
 - }
 - 
 - main "$@"
 
 
  |