summaryrefslogtreecommitdiff
path: root/RELEASE_CHECKLIST.txt
blob: 9ad708c9e8df13ac2f375af699345111df017777 (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

# Release checklist:

## Pre-release tasks

* Figure out whether a release is worthwhile to do.
* Analyze the previous release branch to see if anything should have been
  applied to master.
* Collect changes and assemble tentative release notes.
    * Identify previous release branch point
    * Check commit logs between previous branch point and now for
       notable changes worth mentioning
    * Create a new issues_closed_for_X.Y.md file
        * Include notable entries from here in the release notes.
    * Analyze APIs between previous release branch and master to produce list of
      changes (added/removed/updated funcs, etc...), and detect backwards compat
      issues.
        * https://github.com/lvc/abi-compliance-checker
        * If the new release is not backwards compatible, then this is a MAJOR release.
        * Mention removed features in ChangeLog
    * Update the AUTHORS file
    * Exclude mentioning changes that have already been included in a point 
      release of the previous release branch.

* Update ChangeLog with relevant notes before branching.

* Check that the compile works on Linux - automatic through Travis
* Check that the compile works on NetBSD
* Check that the compile works on Windows - automatic through AppVeyor

## Release creation

Start creating the new release:
    release=0.15
    git clone https://github.com/json-c/json-c json-c-${release}

    mkdir distcheck
    cd distcheck
    # Note, the build directory *must* be entirely separate from
    # the source tree for distcheck to work properly.
    cmake ../json-c-${release}
    make distcheck
    cd ..

Make any fixes/changes *before* branching.

    cd json-c-${release}
    git branch json-c-${release}
    git checkout json-c-${release}

------------

Using ${release}:
	Update the version in json_c_version.h
	Update the version in CMakeLists.txt (VERSION in the project(...) line)
	Update the version in config.h.win32 (several places)

Update the set_target_properties() line in CmakeLists.txt to set the shared
library version.  Generally, unless we're doing a major release, change:
	VERSION x.y.z
to
	VERSION x.y+1.z

    git commit -a -m "Bump version to ${release}"

------------

Generate the doxygen documentation:

    doxygen
    git add -f doc
    git commit doc

------------

Create the release tarballs:

    cd ..
    echo .git > excludes
    tar -czf json-c-${release}.tar.gz -X excludes json-c-${release}

    echo doc >> excludes
    tar -czf json-c-${release}-nodoc.tar.gz -X excludes json-c-${release}

------------

Tag the branch:

    cd json-c-${release}
    git tag -a json-c-${release}-$(date +%Y%m%d) -m "Release json-c-${release}"

    git push origin json-c-${release}
    git push --tags

------------

Go to Amazon S3 service at:
    https://console.aws.amazon.com/s3/

Upload the two tarballs in the json-c_releases folder.
	When uploading, use "Standard" storage class, and make the uploaded files publicly accessible.

Logout of Amazon S3, and verify that the files are visible.
    https://s3.amazonaws.com/json-c_releases/releases/index.html

===================================

Post-release checklist:

    git checkout master

Add new section to ChangeLog for ${release}+1

Use ${release}.99 to indicate a version "newer" than anything on the branch:
	Update the version in json_c_version.h
	Update the version in CMakeLists.txt
	Update the version in config.h.win32

Update RELEASE_CHECKLIST.txt, set release=${release}+1

Update the set_target_properties() line in CmakeLists.txt to match the release branch.

    git commit -a -m "Update the master branch to version 0.${release}.99"
    git push

------------

Update the gh-pages branch with new docs:

    cd json-c-${release}
    git checkout json-c-${release}
    cd ..

    git clone -b gh-pages https://github.com/json-c/json-c json-c-pages
    cd json-c-pages
    mkdir json-c-${release}
    cp -R ../json-c-${release}/doc json-c-${release}/.
    git add json-c-${release}
    git commit -a -m "Add the ${release} docs."

    vi index.html
    # Add/change links to current release.

    git commit -a -m "Update the doc links to point at ${release}"

    git push

------------

Update checksums on wiki page.

    cd ..
    openssl sha -sha256 json-c*gz
    openssl md5 json-c*gz

Copy and paste this output into the wiki page at:
	https://github.com/json-c/json-c/wiki

------------

Send an email to the mailing list.