Releasing¶
opam¶
- Update list of authors and contributors in
.zenodo.json
,CITATION.cff
anddune-project
. -
Update
CHANGELOG.md
:- Add a desired version number (
vX.Y.Z
) header at the top. - Add a list of biggest changes compared to the previous version.
- Add a desired version number (
-
Install dune-release:
opam install dune-release
. -
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.
-
Regenerate
goblint.opam
:dune build
. -
Regenerate
goblint.opam.locked
:opam pin add goblint.dev . --no-action
andopam lock .
.Pinning the package is necessary for locking, otherwise lockfile will be generated for previously published version. Manually remove not installed
depopts
fromconflicts
. -
Check with
dune-release check
.All changes must be committed because the working tree is not checked.
-
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). - Navigate to distribution archive inside Docker container:
cd /goblint
. - Install and test package from distribution archive:
opam-2.1 install --with-test .
. - Activate opam environment:
eval $(opam 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
distrib
because we don't want to publish OCaml API docs. Environment variable workaround for the package having a Read the Docsdoc
URL (see https://github.com/ocamllabs/dune-release/issues/154). -
Re-disable Zenodo GitHub webhook.
-
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¶
- Make sure you are running the same Ubuntu version as will be used for SV-COMP.
- Create conf file for SV-COMP year.
-
Make sure this repository is checked out into a directory called
goblint
, not the defaultanalyzer
.This is required such that the created archive would have everything in a single directory called
goblint
. -
Update SV-COMP year in
sv-comp/archive.sh
.This includes: git tag name, git tag message and zipped conf file.
For each prerun¶
-
Update opam pins:
- Make sure you have the same
goblint-cil
version pinned asgoblint.opam
specifies. - Unpin
zarith.1.12-gob0
, because Gobview compatibility is not required.
- Make sure you have the same
-
Make sure you have nothing valuable that would be deleted by
make clean
. - Delete git tag from previous prerun:
git tag -d svcompXY
. -
Create archive:
./sv-comp/archive.sh
.The resulting archive is
sv-comp/goblint.zip
. -
Check unextracted archive in latest SV-COMP container image: https://gitlab.com/sosy-lab/benchmarking/competition-scripts/#container-image.
Inside Docker:
- Check version:
./goblint --version
. - Mount some sv-benchmarks and properties, e.g. as
/tool-test
, and run Goblint on them manually.
This ensures that the environment and the archive have all the correct system libraries.
- Check version:
-
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
docker
workflow onsvcompXY
git tag and targetingsvcompXY
Docker tag.This is because the usual
docker
workflow only handles semver releases. -
Release new semver version on opam. See above.