summaryrefslogtreecommitdiffstats
path: root/scripts/deploy
blob: 96a661e912a98dd93f9f415c8a7d6bc38d869329 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#!/bin/bash

# Variables:
#  * VIFM_DATE_OVERRIDE -- date to use instead of "now"

if [ "$#" -lt "1" ] || [ "$#" -gt "2" ]; then
    echo "Usage: $0 version [all|update|commit|archive]"
    exit 1
fi

ver="$1"
case "$ver" in
    [0-9].[0-9][0-9].[0-9]-beta);;
    [0-9].[0-9][0-9]-beta);;
    [0-9].[0-9]-beta);;
    [0-9].[0-9][0-9].[0-9]);;
    [0-9].[0-9][0-9]);;
    [0-9].[0-9]);;
    *)
        echo "ERROR: unrecognized version format: $ver"
        exit 1
esac

target="all"

if [ $# -eq 2 ]; then
    target="$2"
fi

function date() {
    if [ -z "$VIFM_DATE_OVERRIDE" ]; then
        command date "$@"
    else
        command date --date="$VIFM_DATE_OVERRIDE" "$@"
    fi
}

# this check is for me, since I'm always use vifm.exe from the repository
if [ "$OS" = Windows_NT ]; then
    if [ "$target" = all ] || [ "$target" = archive ]; then
        vifm_running="$(ps -W | grep vifm.exe)"
        if [ -n "$vifm_running" ]; then
            echo "ERROR: vifm is running"
            exit 2
        fi
    fi
fi

if [ "$target" = all ] || [ "$target" = update ]; then
    echo "Updating version number..."

    # update version in ChangeLogs
    sed -i "s/to current\$/to $ver ($(date '+%Y-%m-%d'))/" \
           ChangeLog ChangeLog.LuaAPI

    # update version in configure script
    sed -i "/AC_INIT(/s/,\\[[^,]\\+/,[$ver]/" configure.ac

    if [ "$OS" != Windows_NT ]; then
        # regenerate autotools files
        autoreconf
        # some voodoo magic to preserve old version of aclocal.m4 file
        make
        git checkout aclocal.m4
        make
        # this one is to get rid of trailing whitespace
        git checkout src/Makefile.in
        make
    fi

    # update version in src/Makefile.win
    makefile=src/Makefile.win
    sed -i "/define VERSION/s/VERSION \".*\"/VERSION \"$ver\"/" "${makefile}"

    vimplugindoc=data/vim/doc/plugin/vifm-plugin.txt
    vimappdoc=data/vim/doc/app/vifm-app.txt
    # update version in vifm-{app,plugin}.txt
    sed -i "/For Vifm version/s/version \\S\\+/version $ver/" "${vimplugindoc}"
    sed -i "/For Vifm version/s/version \\S\\+/version $ver/" "${vimappdoc}"
    # update last change date in vifm-{app,plugin}.txt
    sed -i "/Last change/s/: .*/: $(date '+%Y %b %d')/" "${vimplugindoc}"
    sed -i "/Last change/s/: .*/: $(date '+%Y %b %d')/" "${vimappdoc}"

    # update date in README
    sed -i "/^This file last updated:/s/:.*/:$(date '+ %d %B %Y')/" README
    # update version in README
    sed -i "/^Version:/s/ .*/ $ver/" README
    # update year in README
    sed -i "/^2001 - /s/-.*/$(date '+- %Y')/" README

    # update date in README.md
    sed -i "/^_Latest release is /s/on .*/on $(date '+%d %B %Y')._/" README.md
    # update version in README.md
    sed -i "/^_Latest release is /s/is .*\.  /is ${ver}.  /" README.md

    # update man pages
    sed -i "1s/\"[^\"]\\+\" \"[^\"]\\+\"\$/\"$(date '+%d %B %Y')\" \"vifm $ver\"/" data/man/*.1

    # update first header in the NEWS file
    sed -i -e "1s/.*/$(date '+%d %B %Y')/" \
           -e "2{s/.*/$(date '+%d %B %Y')/;s/./=/g}" NEWS
fi

if [ "$target" = all ] || [ "$target" = commit ]; then
    echo "Making version commit..."

    if ! git commit -av -m "Version v$ver"; then
        echo 'Committing error.'
        exit 1
    fi
    # force mark commit with tag taking the last section in the NEWS for message
    sed -n -e '/^~~~~~~~~~~~~~~~~~/q' -e '/^vifm/,$p' NEWS |
        git tag --force --file=- --sign "v$ver"
fi

if [ "$target" = all ] || [ "$target" = archive ]; then
    echo "Building archive..."

    # make archive
    if [ "$OS" != Windows_NT ]; then
        archive_name="vifm-$ver.tar.bz2"
        make distcheck
    else
        # remove config.h to make Makefile.win install default configuration
        rm -f build-aux/config.h

        # build vifm
        make -C src/ -f Makefile.win clean
        git checkout src/tags.c
        if ! RELEASE=1 make -C src/ -f Makefile.win; then
            echo "ERROR: Building project failed."
            exit 3
        fi
        if ! RELEASE=1 make -C tests/ check; then
            echo "ERROR: Testing project failed."
            exit 4
        fi

        set -e

        dir="vifm-w32-$ver-binary"
        rm -rf "$dir"
        mkdir "$dir"
        cp -R data "$dir"

        # place colors to a pseudo-/etc directory in data/ after updating EOLs
        for i in "$dir/data/colors"/*; do
            unix2dos -c ISO "$i"
        done
        mkdir "$dir/data/etc"
        mv "$dir/data/colors" "$dir/data/etc"

        # remove Unix-specific files from data/
        rm "$dir/data"/*.desktop
        rm "$dir/data"/vifm-media*
        rm "$dir/data"/vifm.appdata.xml
        rm "$dir/data/vifmrc-osx"
        rm -r "$dir/data/man"

        # update EOLs of a few other files in data/
        unix2dos -c ISO "$dir/data/vifm-help.txt"
        unix2dos -c ISO "$dir/data/vifmrc"

        # prepare Vim-files in data/
        mv "$dir/data/vim/doc/plugin/vifm-plugin.txt" "$dir/data/vim/doc/vifm-plugin.txt"
        rmdir "$dir/data/vim/doc/plugin"
        mkdir "$dir/data/vim-doc"
        mv "$dir/data/vim/doc/app" "$dir/data/vim-doc/doc"

        # the rest of text files are outside of data/
        pkgfiles='AUTHORS BUGS ChangeLog ChangeLog.LuaAPI COPYING COPYING.3party FAQ INSTALL NEWS README THANKS TODO'
        for i in $pkgfiles; do
            dest="$dir/$i.txt"
            cp "$i" "$dest"
            unix2dos -c ISO "$dest"
        done

        cp src/vifm-pause src/*.dll src/*.exe "$dir"
        strip -S --strip-unneeded "$dir"/*.dll "$dir"/*.exe

        archive_name="$dir.zip"
        rm -f "$archive_name"
        zip -9 -r "$archive_name" "$dir"

        set +e
    fi
    echo "Archive: $archive_name"
fi