# The Idealised GAP Release Process
The "idealized" release process we want to aim for could look like this (to be adapted as we try to do things); this assumes a branch `stable-4.11` already exists; all of the following should be automated, possibly even in a single script
1. commit & tag release in git
```
# the following should in the end be scripted!
# or done by a server for us
git checkout stable-4.11
# now edit configure.ac to set version to 4.11.3, and also set release day & year
make # may update some other files to have new version
git commit -m "Version 4.11.3" -a # commit it all
git tag -m "Version 4.11.3" v4.11.3 # annotated tag, could also be signed in the future
git push
```
2. At this point, manual work ideally is OVER and now a Travis CI job (or Github Actions, or whatever) takes over and performs all the following steps (but alternatively / initially, one can of course also do them manually, but we really DON'T WANT TO!!!)
3. Upload current packages as "packages for 4.11.3"
- involves downloading `gap-packages-stable-4.11.tar.gz` and re-uploading it as `gap-packages-4.11.3.tar.gz`
- done by a script
- (in the future, we may have a git repository with all deposited packages; then we'd just do `git tag v4.11.3` in there)
4. Create archives: run a script which takes a git ref (a sha1, a tag such "v4.11.3") as argument.
- fetches the code from the given git ref in the GAP repository
- fetches the versioned packages tarball
- extracts packages in the code from git
- build the GAP manual via `make doc`
- (possibly regenerates packages manuals as well???)
- remove LaTeX build artifacts
- (possibly remove further files, e.g. the dev/ dir)
- run `tar` to create `.tar.gz` (and perhaps also `.tar.xz`)
5. Optional: generate binaries
- e.g. create Windows binaries
- create Flatpak/Snap for Linux???
- Max still has that code for creating macOS binaries...
6. Upload the archives we just created to "some server"
- upload to where? back to "our" server?
- could instead or in addition create a GitHub release and upload there
- for the latter, could use something like https://github.com/softprops/action-gh-release
- (but then we are tied to GitHub Actions and can't do it manually; so perhaps a good old script is better after all?)
7. Update the website:
- generate a YAML file with all required info about the release suitable for the NEW Jekyll based website
- run script which iterates over all packages and generates YAML files for each
- put all these YAML files into the GapWWW repository
- also commit and/or upload the GAP and GAP package manuals somewhere (HTML and PDF could go into different places)
- commit and push all this *into a branch* and then open a pull request for that website update
- this way, we retain control over the exact moment the website is updated online, and have a chance to review and check a few things first
- possibly helpful for inspiration:
- https://github.com/BryanSchuetz/jekyll-deploy-gh-pages uses an GitHub Action to push to a branch
- https://github.com/marketplace/actions/create-pull-request
8. If there is a problem at some point (e.g. a failure to download or upload; running out of disk space; error building manual; etc.), we must be able to detect it reliably so we notice it, and can deal with it
9. Document everything thoroughly