hedgedoc/docs/content/dev/release_checklist.md
Philip Molares fd4c341924
Some checks failed
Build & run tests / Node 18 (push) Has been cancelled
Build & run tests / Node 20 (push) Has been cancelled
Build & run tests / Node 22 (push) Has been cancelled
Lint / Lint files (push) Has been cancelled
docs: add release_checklist.md
We should include the release checklist in the docs

Signed-off-by: Philip Molares <philip.molares@udo.edu>
2025-02-14 23:01:15 +01:00

7.6 KiB

Release Checklist:

Preparations:

  • Create release PR(s)

  • Security fixes (make sure all available undisclosed security fixes are merged)

  • Bump the version

    • docs/content/dev/openapi.yml
      • version number image
    • docs/content/setup/manual-setup.md
      • git clone branch
      • git checkout branch
    • package.json
      • version
    • docs/content/setup/docker.md
      • Update docker-compose in the docs
  • Make sure yarn.lock is up to date

  • Make sure translations are up to date

    • We use poeditor_pull to download all language files from POEditor.
    1. change the following line in the script
    -      r_lang = requests.post('https://api.poeditor.com/v2/projects/export', dict(api_token=project_api, id=project_id, language=lang['code'], type="po"))
    +      r_lang = requests.post('https://api.poeditor.com/v2/projects/export', dict(api_token=project_api, id=project_id, language=lang['code'], type="key_value_json"))
    
    1. run the script.
    2. update the json files in the locales directory.
    • any languages with 0% translations should not be included
    1. If any languages are new, they need to be added to locales/_supported.json
  • Write release notes (public/docs/release-notes.md)

    • Update date
    • General description
    • Things requiring special action beside updating the software
    • New features
    • Bug fixes
    • Enhancements
    • Add all contributors
      • sort alphabetically
        • Update AUTHORS file

Final Testing:

  • Create release tar ball
mkdir /tmp/hedgedoc && cd /tmp/hedgedoc
git clone -b master https://github.com/hedgedoc/hedgedoc.git .
yarn install
yarn build
cd ..
tar cvzf hedgedoc-x.y.z.tar.gz --sort=name --exclude hedgedoc/node_modules --exclude hedgedoc/.git --exclude hedgedoc/.github --exclude hedgedoc/.yarn/cache hedgedoc

Use this tar ball to test the following things:

Account system

  • User registration works
  • User login works
  • User self-deletion works

Notes

  • Create new note works
  • Create new note with custom alias works when FreeURL-mode is enabled
  • Create new note with custom alias fails when FreeURL-mode is disabled
  • New note keeps content (visit, write something, leave, visit again after a minute)
  • API POST /new works
    • curl -i -d '# hello world' -H "Content-Type: text/markdown" http://localhost:3000/new
  • API POST /new/some-test-note works when FreeURL-mode is enabled
  • API POST /new/some-test-note fails when FreeURL-mode is disabled
  • Working with 2 (or more) devices on a page works and results in the same document
  • Uploads work for images
  • Uploads fail for other data (e.g. binaries)

Database

Sqlite

  • Sqlite works
  • Keeps content of already existing SQLite file from older version

Postgres

  • Postgres works

Run docker run -d --name=hd1-pg -p 5432:5432 -e POSTGRES_USER=hd1db -e POSTGRES_PASSWORD=hd1db -e POSTGRES_DB=hd1db postgres:latest and put this into your config:

"db": {
  "username": "hd1db",
  "password": "hd1db",
  "database": "hd1db",
  "host": "localhost",
  "port": "5432",
  "dialect": "postgres"
},

MariaDB

  • MariaDB works

Run docker run --name=hd1-mysql -p 3306:3306 -e MARIADB_USER=hd1db --env MARIADB_PASSWORD=hd1db --env MARIADB_DATABASE=hd1db -e MARIADB_RANDOM_ROOT_PASSWORD=true --rm -d mariadb:latest and put this into your config:

"db": {
  "username": "hd1db",
  "password": "hd1db",
  "database": "hd1db",
  "host": "localhost",
  "port": "5432",
  "dialect": "mariadb"
},

Features page

  • Loading /features results in no browser console errors (they may appear for iframed code)
  • Diagrams render without error
  • MathJAX rendering works for inline $x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$
  • MathJAX rendering works for multi-line (see features page)
  • Codeblocks areas are highlighted and have line numbers in front.

Table of content (TOC) tests

  • TOC renders in the document as content
  • TOC renders in the lower right corner of the document in both-view
  • TOC renders besides the document in the view-view
  • TOC renders besides the document in published-view
  • Interactive TOC follows the header while scrolling in both-view
  • Interactive TOC follows the header while scrolling in view-view
  • Interactive TOC follows the header while scrolling in published-view

Embeddings

Click in them an try to play around with them. Don't just check they exist and show up.

  • Youtube embedding works
  • Vimeo embedding works
  • Gist embedding works

Working YAML-Meta

  • Testing each option if it works

GDPR features

  • Delete account works
  • When account is deleted, verify notes are gone as well
  • Data export works

Auth

  • SAML
    • config
"saml": {
  "idpSsoUrl": "https://auth.hedgedoc.cloud/application/saml/test-hd1/sso/binding/redirect/",
  "idpCert": "/tmp/auth.hedgedoc.cloud.pem",
  "identifierFormat": "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent",
  "attribute": {
    "id": "http://schemas.goauthentik.io/2021/02/saml/uid",
    "username": "http://schemas.goauthentik.io/2021/02/saml/username",
    "email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
  }
}
  • LDAP
    • docker image: docker run --rm -p 10389:10389 -p 10636:10636 -d ghcr.io/rroemhild/docker-test-openldap:master
    • config
"ldap": {
  "url": "ldap://localhost:10389",
  "bindDn": "cn=admin,dc=planetexpress,dc=com",
  "bindCredentials": "GoodNewsEveryone",
  "searchBase": "ou=people,dc=planetexpress,dc=com",
  "searchFilter": "(&(uid={{username}})(objectClass=inetOrgPerson))",
  "searchAttributes": ["uid", "cn"],
  "usernameField": "cn",
  "useridField": "uid",
  "tlsOptions": {}
}
  • OAuth2
"oauth2": {
  "baseURL": "https://auth.hedgedoc.cloud/application/o/test-hedgedoc/",
  "userProfileURL": "https://auth.hedgedoc.cloud/application/o/userinfo/",
  "tokenURL": "https://auth.hedgedoc.cloud/application/o/token/",
  "authorizationURL": "https://auth.hedgedoc.cloud/application/o/authorize/",
  "clientID": "REDACTED",
  "clientSecret": "REDACTED",
  "scope": "openid profile user",
  "userProfileUsernameAttr": "preferred_username",
  "userProfileEmailAttr": "email",
  "userProfileDisplayNameAttr": "name"
}
  • GitHub
  • Rate-limiting for basic user/password

Release: