Browse Source

Convert from slop-copr-build

Alois Mahdal 6 years ago
commit
2f905b75b7
4 changed files with 276 additions and 0 deletions
  1. 4
    0
      README.md
  2. 219
    0
      trigger_copr
  3. 41
    0
      vimb.spec.in
  4. 12
    0
      vimb.trigger

+ 4
- 0
README.md View File

@@ -0,0 +1,4 @@
1
+README
2
+======
3
+
4
+This repo contains script to build `vimb` at my Fedora COPR.

+ 219
- 0
trigger_copr View File

@@ -0,0 +1,219 @@
1
+#!/bin/bash
2
+
3
+TRIGGER_COPR_CONFIG=${TRIGGER_COPR_CONFIG:-}
4
+TRIGGER_COPR_PKGNAME=${TRIGGER_COPR_PKGNAME:-}
5
+
6
+warn() {
7
+    echo "$1" >&2
8
+}
9
+
10
+die() {
11
+    warn "fatal: $1"
12
+    exit 3
13
+}
14
+
15
+usage() {
16
+    warn "usage: $0 [options] MODE"
17
+    warn ""
18
+    warn "Options:"
19
+    warn ""
20
+    warn "  -b BRN  build from branch BRN (default: last tag)"
21
+    warn "  -c COPR_PROJECT  COPR project name"
22
+    warn "  -C CONF   config file"
23
+    warn "  -n      dry mode, don't do anything (just show"
24
+    warn "          what would be done)"
25
+    warn "  -r REL  use REL as Release number in SPEC file"
26
+    warn "  -v VER  use VER as Version number in SPEC file"
27
+    warn "  -u URL  use URL as base (to get last tag and"
28
+    warn "          compose Source0 in SPEC file)"
29
+    warn ""
30
+    warn "If -b is not used, build is launched from last tag available"
31
+    warn "in the GitHub repo.  In that case, Release is '1' and Version"
32
+    warn "is deduced from the tag by removing the initial 'v'."
33
+    warn ""
34
+    warn "If -b is used, the project repo is temporarily cloned, and"
35
+    warn "both Version and Release are found by consulting git-describe"
36
+    warn "on the specified branch."
37
+    warn ""
38
+    warn "If MODE is 'scratch' (default), Release is pre-fixed by string"
39
+    warn "'0.scratch.' and build is triggered in scratch COPR project."
40
+    exit 2
41
+}
42
+
43
+last_version() {
44
+    git ls-remote --tag "$UrlBase" \
45
+      | grep '/tags/' \
46
+      | cut -d/ -f3 \
47
+      | grep -v '[^0-9a-z.]' \
48
+      | sort -V \
49
+      | tail -1 \
50
+      | sed "s/^v//"
51
+}
52
+
53
+mkspec() {
54
+    local self_version
55
+    local cl_date
56
+    self_version="$(basename "$0") $(git describe --tags)"
57
+    cl_date=$(LC_ALL=C date +"%a %b %d %Y")
58
+    sed -e "
59
+        s|__APP_VERSION__|$Version|
60
+        s|__APP_RELEASE__|$Release|
61
+        s|__APP_URLBASE__|$UrlBase|
62
+        s|__APP_BUILDSCRIPT_VERSION__|$self_version|
63
+        s|__APP_DATE__|$cl_date|
64
+    " <"$PkgName.spec.in"
65
+}
66
+
67
+git_guess() {
68
+    #
69
+    # Print git-guessed $1
70
+    #
71
+    local what=$1   # what we want (ver|rel)
72
+    local describe  # full git-describe output
73
+    local xtra=     # extra part (-N-gHASH)
74
+    local num=0     # num. of commits since tag (N)
75
+    local sha=      # '.g'+sha1 of this commit (gHASH)
76
+    describe=$(git describe --tags --always HEAD)
77
+    case $describe in
78
+        *-*)                        #     v1.2.3-21-g654cba
79
+            tag=${describe%%-*}     # tag=v1.2.3
80
+            xtra=${describe#$tag-}  # xtra=-21-g654cba
81
+            num=${xtra%%-*}         # num=21
82
+            sha=.${xtra#$num-}      # sha=.g654cba
83
+            ;;
84
+        *)
85
+            tag=$describe
86
+            ;;
87
+    esac
88
+    case $what in
89
+        ver)    echo "${tag#v}"         ;;
90
+        rel)    echo "$((num + 1))$sha" ;;
91
+    esac
92
+}
93
+
94
+choose_relpfx() {
95
+    #
96
+    # Choose COPR project based on $Mode
97
+    #
98
+    test "$Mode" == scratch && echo 0.scratch.
99
+    return 0
100
+}
101
+
102
+read_conffile() {
103
+    #
104
+    # Read item T
105
+    #
106
+    local what=$1
107
+    local fieldn
108
+    case $what in
109
+        urlbase) fieldn=2 ;;
110
+        copr)    fieldn=3 ;;
111
+    esac
112
+    grep -v '^[[:blank:]]*#' "$ConfFile" \
113
+      | grep "^ *$Mode\>" \
114
+      | sed 's/  */ /g' \
115
+      | cut -d' ' -f$fieldn
116
+}
117
+
118
+choose_conffile() {
119
+    #
120
+    # Find config file and echo its name
121
+    #
122
+    find . -name '*.trigger' \
123
+      | cut -d/ -f2 \
124
+      | grep .
125
+}
126
+
127
+do_action() {
128
+    local url
129
+    case $Action in
130
+        build)
131
+            copr build "$CoprProject" "$Tmp/$PkgName.spec"
132
+            ;;
133
+        demo)
134
+            warn "demo mode active, we would build:"
135
+            warn "    at $CoprProject"
136
+            test -n "$Branch" && warn "    using branch $Branch"
137
+            test -n "$Branch" || warn "    using last tag"
138
+            warn "    from $UrlBase"
139
+            warn "    yielding $PkgName-$Version-$Release.*.rpm"
140
+            warn ""
141
+            warn "===== BEGIN $PkgName.spec ====="
142
+            cat "$Tmp/$PkgName.spec"
143
+            warn "===== END $PkgName.spec ====="
144
+            return 1
145
+            ;;
146
+        mkspec)
147
+            cat "$Tmp/$PkgName.spec"
148
+            ;;
149
+        rpmstuff)
150
+            url=$(
151
+                grep -o 'Source.*:.*http.*' "$Tmp/$PkgName.spec" \
152
+                  | sed "
153
+                        s/.*http/http/
154
+                        s/ *$//
155
+                        s/%{version}/$Version/
156
+                    "
157
+            )
158
+            wget --quiet "$url"
159
+            cat "$Tmp/$PkgName.spec" > "$PkgName.spec"
160
+            ;;
161
+    esac
162
+}
163
+
164
+main() {
165
+    local Version       # Version in SPEC file
166
+    local Release       # Release in SPEC file
167
+    local CoprProject   # COPR project
168
+    local UrlBase       # GitHub URL base
169
+    local Tmp           # our temp
170
+    local Branch        # branch to use, if empty, tags are considered
171
+    local Mode=scratch  # implies COPR project and release prefix
172
+    local Action=build  # what to do
173
+    local ConfFile      # config file to use
174
+    local PkgName       # package name
175
+    local es=0          # exit status
176
+    which copr >/dev/null \
177
+     || die "copr not found, try 'sudo install copr-cli'"
178
+    Tmp=$(mktemp -d)
179
+    while true; do case $1 in
180
+        -C) ConfFile=$2;    shift 2 || usage ;;
181
+        -a) Action=$2;      shift 2 || usage ;;
182
+        -b) Branch=$2;      shift 2 || usage ;;
183
+        -c) CoprProject=$2; shift 2 || usage ;;
184
+        -u) UrlBase=$2;     shift 2 || usage ;;
185
+        -r) Release=$2;     shift 2 || usage ;;
186
+        -v) Version=${2#v}; shift 2 || usage ;;
187
+        -n) Action=demo;    shift ;;
188
+        -*) usage ;;
189
+        *)  break ;;
190
+    esac done
191
+    Mode=${1:-$Mode}
192
+    case $Action in
193
+        build|demo|mkspec|rpmstuff) : ;;
194
+        *) usage ;;
195
+    esac
196
+    test -n "$ConfFile" || ConfFile=$TRIGGER_COPR_CONFIG
197
+    test -n "$ConfFile" || ConfFile=$(choose_conffile)
198
+    test -n "$ConfFile" || die "could not find config file"
199
+    test -r "$ConfFile" || die "could not read config file"
200
+    test -n "$PkgName"  || PkgName=$TRIGGER_COPR_PKGNAME
201
+    test -n "$PkgName"  || PkgName=${ConfFile%.trigger}
202
+    test -n "$CoprProject" || CoprProject=$(read_conffile copr)
203
+    test -n "$UrlBase"     || UrlBase=$(read_conffile urlbase)
204
+    if test -n "$Branch"; then
205
+        die "not implemented"
206
+        test -n "$Version" || Version=$(git_guess ver)
207
+        test -n "$Release" || Release=$(git_guess rel)
208
+    else
209
+        test -n "$Version" || Version=$(last_version)
210
+        test -n "$Release" || Release=1
211
+    fi
212
+    Release=$(choose_relpfx)$Release
213
+    mkspec >"$Tmp/$PkgName.spec"
214
+        do_action
215
+    rm -rf "$Tmp"
216
+    return $es
217
+}
218
+
219
+main "$@"

+ 41
- 0
vimb.spec.in View File

@@ -0,0 +1,41 @@
1
+Name:       vimb
2
+Version:    __APP_VERSION__
3
+Release:    __APP_RELEASE__%{?dist}
4
+Summary:    The Vim-like browser
5
+URL:        https://github.com/fanglingsu/vimb
6
+
7
+License:    GPLv3
8
+Source0:    __APP_URLBASE__/archive/%{version}.tar.gz
9
+
10
+BuildRequires: make
11
+BuildRequires: webkitgtk-devel
12
+
13
+%description
14
+Vimb is a Vim-like web browser that is inspired by Pentadactyl and
15
+Vimprobable. The goal of Vimb is to build a completely keyboard-driven,
16
+efficient and pleasurable browsing-experience with low memory and CPU
17
+usage that is intuitive to use for Vim users.
18
+
19
+%prep
20
+%autosetup -n %{name}-%{version}
21
+
22
+%build
23
+CFLAGS="${CFLAGS:-%{optflags}}"; export CFLAGS
24
+%make_build
25
+
26
+%install
27
+make install DESTDIR=%{buildroot} PREFIX=/usr
28
+sed -i -e '1 s|#!/usr/bin/env bash|#!/bin/bash|' \
29
+    %{buildroot}/%{_datadir}/%{name}/examples/formfiller/formfiller
30
+
31
+%files
32
+%{_bindir}/vimb
33
+%{_mandir}/man1/vimb.1.gz
34
+%{_datadir}/%{name}/examples/formfiller/formfiller
35
+%{_datadir}/%{name}/examples/formfiller/scripts.js
36
+
37
+%changelog
38
+* __APP_DATE__ Alois Mahdal <netvor+vimb@vornet.cz> - __APP_VERSION__-__APP_RELEASE__
39
+- Unofficial experimental RPM pseudo-release
40
+
41
+# spec file generated from __APP_BUILDSCRIPT_VERSION__

+ 12
- 0
vimb.trigger View File

@@ -0,0 +1,12 @@
1
+# list of mode data
2
+#
3
+# Format:
4
+#
5
+#   *  MODE is mode name
6
+#   *  URLBASE is GitHub address to get latest source from
7
+#   *  COPR is COPR project name,
8
+#
9
+#
10
+# MODE   URLBASE                             COPR
11
+scratch  https://github.com/AloisMahdal/vimb amahdal/vimb
12
+main     https://github.com/fanglingsu/vimb  amahdal/vimb-scratch