Releasing¶
opam¶
- Choose version name (collaboratively).
- Update list of authors and contributors in
.zenodo.json,CITATION.cffanddune-project. -
Update
CHANGELOG.md:- Add a desired version number (
vX.Y.Z) and name header at the top. - Add a list of biggest changes compared to the previous version.
- Add a desired version number (
-
Remove all opam pins because opam-repository doesn't allow them.
- If the pinned changes have been released and published in opam, remove the pin (and add a version lower bound).
- If the pinned changes are not strictly necessary for building (but just optimization or stability), then temporarily remove the pin.
-
Check opam file for previous release on opam-repository for changes.
- Regenerate
goblint.opam:dune build. -
Regenerate
goblint.opam.locked:opam pin add goblint.dev . --no-actionandopam lock ..Pinning the package is necessary for locking, otherwise lockfile will be generated for previously published version. Manually remove not installed
depoptsfromconflicts. -
Install dune-release:
opam install dune-release. -
Check with
dune-release check.All changes must be committed because the working tree is not checked.
The warning
[FAIL] opam field doc cannot be parsed by dune-releaseis fine and can be ignored (see https://github.com/ocamllabs/dune-release/issues/154). -
Check that "unlocked" workflow passes on GitHub Actions.
It can be run manually on the release branch for checking.
-
Tag the release:
dune-release tag. -
Create the distribution archive:
dune-release distrib. -
Check created distribution archive (in
_build) in a clean environment:- Pull Docker image:
docker pull ocaml/opam:ubuntu-22.04-ocaml-4.14(or newer). - Extract distribution archive.
- Run Docker container in extracted directory:
docker run -it --rm -v $(pwd):/goblint ocaml/opam:ubuntu-22.04-ocaml-4.14(or newer). - Update opam-repository from git:
opam-2.2 repository add git git+https://github.com/ocaml/opam-repository.git && opam-2.2 update. - Navigate to distribution archive inside Docker container:
cd /goblint. - Install and test package from distribution archive:
opam-2.2 install --with-test .. - Activate opam environment:
eval $(opam-2.2 env). - Check version:
goblint --version. - Check that analysis works:
goblint -v tests/regression/04-mutex/01-simple_rc.c. - Exit Docker container.
- Pull Docker image:
-
Temporarily enable Zenodo GitHub webhook.
This is because we only want numbered version releases to automatically add a new version to our Zenodo artifact. Other tags (like SV-COMP or paper artifacts) have manually created Zenodo artifacts anyway and thus shouldn't add new versions to the main Zenodo artifact.
-
Create a GitHub release with the git tag:
DUNE_RELEASE_DELEGATE=github-dune-release-delegate dune-release publish distrib.Explicitly specify
distribbecause we don't want to publish OCaml API docs. Environment variable workaround for the package having a Read the DocsdocURL (see https://github.com/ocamllabs/dune-release/issues/154). -
Re-disable Zenodo GitHub webhook.
-
Edit GitHub release to add version name.
- Create an opam package:
dune-release opam pkg. - Submit the opam package to opam-repository:
dune-release opam submit. - Revert temporary removal of opam pins.
SV-COMP¶
Before all preruns¶
- Update Ubuntu version used for SV-COMP in
scripts/sv-comp/Dockerfile. - Create conf file for SV-COMP year.
-
Update SV-COMP year in
Makefile,scripts/sv-comp/archive.sh,scripts/sv-comp/smoketest.shandscripts/sv-comp/Dockerfile.This includes: git tag name, git tag message, zipped conf file and SV-COMP container image tag.
-
Open MR with conf file name to the bench-defs repository.
For each prerun¶
- Make sure you have a clean git repository.
- Delete git tag from previous prerun (if exists):
git tag -d svcompXY. -
Create archive:
make sv-comp.This locally creates the
svcompXYgit tag, which should not be pushed until after all preruns (see below). This also smoke tests (withscripts/sv-comp/smoketest.sh) the archive on clean Ubuntu (with required packages) and competition Ubuntu. The resulting archive isscripts/sv-comp/goblint.zip. -
Create (or add new version) Zenodo artifact and upload the archive.
- Open MR with Zenodo version DOI to the fm-tools repository.
After all preruns¶
- Push git tag from last prerun:
git push origin svcompXY. - Create GitHub release from the git tag and attach latest submitted archive as a download.
-
Manually run
dockerworkflow onsvcompXYgit tag and targetingsvcompXYDocker tag.This is because the usual
dockerworkflow only handles semver releases. -
Release new semver version on opam. See above.