haskell-language-server/RELEASING.md
fendor 9c56c3c0c6
Prepare release 2.1.0.0 (#3748)
* Prepare release 2.1.0.0

* Update release ghc versions

* Fix release CI for unknown linux

* Generate ChangeLog from 2.0.0.0

* Update notable changes in ChangeLog

* Update index-state

* Add environment for vars context

* Free up disk space after running test

* Expand release notes

* Update supported ghc version page

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2023-08-12 10:40:41 +00:00

3.7 KiB

Releasing

Release checklist

  • check ghcup supports new GHC releases if any
  • set the supported GHCs in workflow file .github/workflows/release.yaml
    • There is currently a list of GHC versions for each major platform. Search for ghc: [ to find all lists.
    • Look for TODO: to find locations that require extra care for GHC versions.
  • check all plugins still work if release includes code changes
  • bump package versions in all *.cabal files (same version as hls)
    • HLS uses a lockstep versioning. The core packages and all plugins use the same version number, and only support exactly the this version.
      • Exceptions:
        • hie-compat requires no automatic version bump.
        • shake-bench is an internal testing tool, not exposed to the outside world. Thus, no version bump required for releases.
    • For updating cabal files, the following script can be used:
      • # Update all `version:` fields
        sed -ri "s/^version:( +)2.1.0.0/version:\12.2.0.0/" **/*.cabal
        # Update all constraints expected to be in the form `== <version>`.
        # We usually don't force an exact version, so this is relatively unambiguous.
        # We could introduce some more ad-hoc parsing, if there is still ambiguity.
        sed -ri "s/== 2.1.0.0/== 2.2.0.0/" **/*.cabal
        
      • It still requires manual verification and review
  • generate and update changelog
    • Generate a ChangeLog via ./GenChangelogs.hs <api-key> <tag>
  • create release branch as wip/<version>
    • git switch -c wip/<version>
  • create release tag as <version>
    • git tag <version>
  • trigger release pipeline by pushing the tag
    • this creates a draft release
    • git push <remote> <version>
  • run sh scripts/release/download-gh-artifacts.sh <version> <your-gpg-email>
    • downloads artifacts to gh-release-artifacts/<version>/
    • also downloads FreeBSD bindist from circle CI
    • adds signatures
  • upload artifacts to downloads.haskell.org manually from gh-release-artifacts/<version>/
    • You require sftp access, contact wz1000, bgamari or chreekat
    • For uploading, rename gh-release-artifacts/<version> to gh-release-artifacts/haskell-language-server-<version>
    • cd gh-release-artifacts/haskell-language-server-<version>
    • SIGNING_KEY=... ../../release/upload.sh upload
      • Your SIGNING_KEY can be obtained with gpg --list-secret-keys --keyid-format=long
    • Afterwards, the artifacts are available at: https://downloads.haskell.org/~hls/haskell-language-server-<version>/
    • Run SIGNING_KEY=... ../../release/upload.sh purge_all to remove CDN caches
  • create PR to ghcup-metadata
    • update ghcup-0.0.7.yaml and ghcup-vanilla-0.0.7.yaml
      • can use sh scripts/release/create-yaml-snippet.sh <version> to generate a snippet that can be manually inserted into the yaml files
    • update hls-metadata-0.0.1.json
      • utilize cabal run ghcup-gen -- generate-hls-ghcs -f ghcup-0.0.7.yaml --format json --stdout in the root of ghcup-metadata repository
    • Be sure to mark the correct latest version and add the 'recommended' tag to the latest release.
  • get sign-off on release
    • from wz1000, michealpj, maerwald and fendor
  • publish release on github
  • upload hackage packages
    • requires credentials
  • update https://haskell-language-server.readthedocs.io/en/latest/support/ghc-version-support.html#current-ghc-version-support-status
  • post release on discourse and reddit
  • merge release PR to master or forward port relevant changes