rclone/RELEASE.md

174 lines
5.1 KiB
Markdown
Raw Normal View History

2019-09-02 20:05:29 +08:00
# Release
This file describes how to make the various kinds of releases
## Extra required software for making a release
* [gh the github cli](https://github.com/cli/cli) for uploading packages
2015-02-05 06:31:56 +08:00
* pandoc for making the html and man pages
2019-09-02 20:05:29 +08:00
## Making a release
2020-09-03 18:29:33 +08:00
* git checkout master # see below for stable branch
* git pull # IMPORTANT
2017-01-02 22:38:14 +08:00
* git status - make sure everything is checked in
2020-02-01 18:31:42 +08:00
* Check GitHub actions build for master is Green
* make test # see integration test server or run locally
2015-02-05 06:31:56 +08:00
* make tag
2020-02-01 18:31:42 +08:00
* edit docs/content/changelog.md # make sure to remove duplicate logs from point releases
2019-10-26 18:04:54 +08:00
* make tidy
* make doc
2017-01-02 23:30:34 +08:00
* git status - to check for new man pages - git add them
2019-04-13 18:01:58 +08:00
* git commit -a -v -m "Version v1.XX.0"
2015-02-05 06:31:56 +08:00
* make retag
* git push origin # without --follow-tags so it doesn't push the tag if it fails
2020-09-13 17:27:24 +08:00
* git push --follow-tags origin
2020-02-01 20:31:44 +08:00
* # Wait for the GitHub builds to complete then...
* make fetch_binaries
* make tarball
* make vendorball
* make sign_upload
* make check_sign
2017-07-23 01:16:46 +08:00
* make upload
* make upload_website
* make upload_github
2020-09-03 18:29:33 +08:00
* make startdev # make startstable for stable branch
2020-05-27 23:11:47 +08:00
* # announce with forum post, twitter post, patreon post
2016-12-15 01:49:26 +08:00
## Update dependencies
2024-05-22 22:50:31 +08:00
Early in the next release cycle update the dependencies.
2019-09-02 20:05:29 +08:00
* Review any pinned packages in go.mod and remove if possible
2024-05-22 22:50:31 +08:00
* `make updatedirect`
* `make GOTAGS=cmount`
* `make compiletest`
* Fix anything which doesn't compile at this point and commit changes here
* `git commit -a -v -m "build: update all dependencies"`
If the `make updatedirect` upgrades the version of go in the `go.mod`
then go to manual mode. `go1.20` here is the lowest supported version
in the `go.mod`.
```
go list -m -f '{{if not (or .Main .Indirect)}}{{.Path}}{{end}}' all > /tmp/potential-upgrades
go get -d $(cat /tmp/potential-upgrades)
go mod tidy -go=1.20 -compat=1.20
```
If the `go mod tidy` fails use the output from it to remove the
package which can't be upgraded from `/tmp/potential-upgrades` when
done
```
git co go.mod go.sum
```
And try again.
Optionally upgrade the direct and indirect dependencies. This is very
likely to fail if the manual method was used abve - in that case
ignore it as it is too time consuming to fix.
* `make update`
* `make GOTAGS=cmount`
* `make compiletest`
* roll back any updates which didn't compile
2024-05-22 22:50:31 +08:00
* `git commit -a -v --amend`
2023-10-29 01:06:17 +08:00
* **NB** watch out for this changing the default go version in `go.mod`
Note that `make update` updates all direct and indirect dependencies
and there can occasionally be forwards compatibility problems with
doing that so it may be necessary to roll back dependencies to the
version specified by `make updatedirect` in order to get rclone to
build.
2024-05-22 22:50:31 +08:00
Once it compiles locally, push it on a test branch and commit fixes
until the tests pass.
2022-09-13 03:30:34 +08:00
## Tidy beta
At some point after the release run
bin/tidy-beta v1.55
where the version number is that of a couple ago to remove old beta binaries.
2019-09-02 20:05:29 +08:00
## Making a point release
If rclone needs a point release due to some horrendous bug:
2019-09-02 20:05:29 +08:00
2020-09-03 18:29:33 +08:00
Set vars
2019-09-02 20:05:29 +08:00
* BASE_TAG=v1.XX # e.g. v1.52
* NEW_TAG=${BASE_TAG}.Y # e.g. v1.52.1
2020-06-10 23:49:04 +08:00
* echo $BASE_TAG $NEW_TAG # v1.52 v1.52.1
2020-09-03 18:29:33 +08:00
First make the release branch. If this is a second point release then
this will be done already.
* git co -b ${BASE_TAG}-stable ${BASE_TAG}.0
2020-09-03 18:29:33 +08:00
* make startstable
2019-09-02 20:05:29 +08:00
Now
2020-06-10 23:49:04 +08:00
* git co ${BASE_TAG}-stable
* git cherry-pick any fixes
2020-09-03 18:29:33 +08:00
* Do the steps as above
* make startstable
2019-09-02 20:05:29 +08:00
* git co master
* `#` cherry pick the changes to the changelog - check the diff to make sure it is correct
2020-09-03 18:29:33 +08:00
* git checkout ${BASE_TAG}-stable docs/content/changelog.md
* git commit -a -v -m "Changelog updates from Version ${NEW_TAG}"
2019-09-02 20:05:29 +08:00
* git push
## Sponsor logos
If updating the website note that the sponsor logos have been moved out of the main repository.
You will need to checkout `/docs/static/img/logos` from https://github.com/rclone/third-party-logos
which is a private repo containing artwork from sponsors.
## Update the website between releases
Create an update website branch based off the last release
git co -b update-website
If the branch already exists, double check there are no commits that need saving.
Now reset the branch to the last release
git reset --hard v1.64.0
Create the changes, check them in, test with `make serve` then
make upload_test_website
Check out https://test.rclone.org and when happy
make upload_website
Cherry pick any changes back to master and the stable branch if it is active.
## Making a manual build of docker
To do a basic build of rclone's docker image to debug builds locally:
```
docker buildx build --load -t rclone/rclone:testing --progress=plain .
docker run --rm rclone/rclone:testing version
```
To test the multipatform build
```
docker buildx build -t rclone/rclone:testing --progress=plain --platform linux/amd64,linux/386,linux/arm64,linux/arm/v7,linux/arm/v6 .
```
To make a full build then set the tags correctly and add `--push`
```
docker buildx build --platform linux/amd64,linux/386,linux/arm64,linux/arm/v7 -t rclone/rclone:1.54.1 -t rclone/rclone:1.54 -t rclone/rclone:1 -t rclone/rclone:latest --push .
```