File: publish_release.sh

package info (click to toggle)
mapnik 4.2.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,592 kB
  • sloc: cpp: 163,859; python: 1,332; sh: 690; xml: 161; makefile: 123; perl: 28; lisp: 13
file content (160 lines) | stat: -rwxr-xr-x 5,764 bytes parent folder | download
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
#!/bin/bash

set -eu
set -o pipefail

: '

Usage:

  git tag v3.0.12-rc7 -a -m "Tagging v3.0.12-rc7"
  ./scripts/publish_release.sh

Note: before running this script you need to tag a new release or release candidate.

This script:

 - confirms that the current git checkout is a valid tag
 - Downloads a fresh checkout to a /tmp directory
 - Updates the submodules
 - Confirms that the test-data and test-data-visual is also tagged, otherwise tags them
 - Removes the test-data and test-data-visual since they are large and can be downloaded dynamically for released code
 - Creates a tarball and uploads to a DRAFT "github release"

After using this script:

 - Go to https://github.com/mapnik/mapnik/releases and confirm that the draft release looks good, then publish it.

'

function step { >&2 echo -e "\033[1m\033[36m* $1\033[0m"; }
function step_error { >&2 echo -e "\033[1m\033[31m$1\033[0m"; }

if [[ ${GITHUB_TOKEN_MAPNIK_PUBLIC_REPO:-false} == false ]]; then
    step_error "Please set GITHUB_TOKEN_MAPNIK_PUBLIC_REPO to a github token with 'public_repo' scope (create one at https://github.com/settings/tokens)"
    exit 1
fi

export MAPNIK_VERSION=$(git describe)
if [[ $(git tag -l) =~ $MAPNIK_VERSION ]]; then
    step "Success: found $MAPNIK_VERSION (result of git describe) in tags, continuing"
else
    step_error "error: $MAPNIK_VERSION (result of git describe) not in "git tag -l" output, aborting"
    step_error "You must create a valid annotated tag first, before running this ./scripts/publish_release.sh"
    exit 1
fi

# alternatively set this to `git@github.com:mapnik/mapnik.git` to pull public tag
export ROOT_GIT_CLONE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd ../ && pwd )"

export TARBALL_NAME="mapnik-${MAPNIK_VERSION}"
cd /tmp/
rm -rf ${TARBALL_NAME}
step "Cloning ${MAPNIK_VERSION}"
git clone --depth 1 --branch ${MAPNIK_VERSION} ${ROOT_GIT_CLONE} ${TARBALL_NAME}
cd ${TARBALL_NAME}
step "Checking out ${MAPNIK_VERSION}"
git checkout "tags/${MAPNIK_VERSION}"

step "checking submodules"
step "vendorizing and cleaning up"
git submodule update --init deps/mapbox/variant
git submodule update --init deps/mapbox/geometry
git submodule update --init deps/mapbox/polylabel
git submodule update --init deps/mapbox/protozero
git submodule update --init deps/mapbox/mapnik-vector-tile

rm -rf deps/mapbox/variant/.git*
rm -rf deps/mapbox/variant/.mason
rm -f deps/mapbox/variant/*yml
rm -f deps/mapbox/variant/Jamroot
rm -f deps/mapbox/variant/.travis.yml

rm -rf deps/mapbox/geometry/.git*
rm -f deps/mapbox/geometry/.travis.yml

rm -rf deps/mapbox/polylabel/.git*
rm -rf deps/mapbox/polylabel/.mason
rm -f deps/mapbox/polylabel/.travis.yml

rm -rf deps/mapbox/protozero/.git*
rm -f deps/mapbox/protozero/.travis.yml

rm -rf deps/mapbox/mapnik-vector-tile/.git*
rm -f deps/mapbox/mapnik-vector-tile/.travis.yml

function check_and_tag() {
    REPO_DIR=$1
    REPO_NAME=$2
    cmd="curl --fail -I https://github.com/mapnik/${REPO_NAME}/releases/tag/${MAPNIK_VERSION}"
    if [[ $(${cmd}) ]]; then
        step "test data already tagged, no need to initialize submodule"
    else
        step "tagging test data"
        git submodule update --init ${REPO_DIR}
        cd ${REPO_DIR}/
        git remote set-url origin git@github.com:mapnik/${REPO_NAME}
        git tag ${MAPNIK_VERSION} -a -m "tagging for ${MAPNIK_VERSION}"
        git push --tags
        cd ../../
        step "removing test data submodule"
        rm -rf ${REPO_DIR}/
    fi

}

# test data
check_and_tag test/data test-data
# test data visual
check_and_tag test/data-visual test-data-visual

step "removing .git and .gitignore etc"
rm -rf .git*
export TARBALL_COMPRESSED=${TARBALL_NAME}.tar.bz2
echo ${MAPNIK_VERSION} > RELEASE_VERSION.md
step "creating tarball of ${TARBALL_COMPRESSED}"
cd ../
tar cjf ${TARBALL_COMPRESSED} ${TARBALL_NAME}/

step "uploading to github"
# https://developer.github.com/v3/repos/rseleases/#create-a-release
IS_PRERELEASE=false
if [[ ${MAPNIK_VERSION} =~ 'rc' ]] || [[ ${MAPNIK_VERSION} =~ 'alpha' ]]; then
  IS_PRERELEASE=true
fi
IS_DRAFT=true
step "creating a draft release"

export CHANGELOG_REF=$(python3 -c "print('${MAPNIK_VERSION}'.replace('.','').replace('v','').split('-')[0])")
export RELEASE_NOTES="Mapnik ${MAPNIK_VERSION}\r\n\r\n[Changelog](https://github.com/mapnik/mapnik/blob/${MAPNIK_VERSION}/CHANGELOG.md#${CHANGELOG_REF})"
step "release notes: $RELEASE_NOTES"

# create draft release
curl --data "{\"tag_name\": \"${MAPNIK_VERSION}\",\"target_commitish\": \"master\",\"name\": \"Mapnik ${MAPNIK_VERSION}\",\"body\": \"${RELEASE_NOTES}\",\"draft\": ${IS_DRAFT},\"prerelease\": ${IS_PRERELEASE}}" \
     https://api.github.com/repos/mapnik/mapnik/releases \
     -H "Authorization: bearer ${GITHUB_TOKEN_MAPNIK_PUBLIC_REPO}" \
     > create_response.json
cat create_response.json
# parse out upload url and form it up to post tarball
UPLOAD_URL=$(python3 -c "import json;print(json.load(open('create_response.json'))['upload_url'].replace('{?name,label}','?name=${TARBALL_COMPRESSED}'))")
HTML_URL=$(python3 -c "import json;print(json.load(open('create_response.json'))['html_url'])")

step "upload url: $UPLOAD_URL"

# upload source tarball
curl -L \
     -X POST \
     -H "Accept: application/vnd.github+json" \
     -H "Authorization: bearer ${GITHUB_TOKEN_MAPNIK_PUBLIC_REPO}" \
     -H "X-GitHub-Api-Version: 2022-11-28" \
     -H "Content-Type:application/octet-stream" \
     ${UPLOAD_URL} \
     --data-binary "@${TARBALL_COMPRESSED}"

echo
step "Success: view your new draft release at ${HTML_URL}"
open ${HTML_URL}
echo

#step "uploading $(realpath ${TARBALL_COMPRESSED}) to s3://mapnik/dist/${MAPNIK_VERSION}/"
#aws s3 cp --acl public-read ${TARBALL_COMPRESSED} s3://mapnik/dist/${MAPNIK_VERSION}/