Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

Meant as a starting point for a discussion. Lets agree on wich parts that we want/need to have.

Requirements

  • Clear rules for semantic versioning

  • Clear documentation of changes

  • main trunk has to be stable

  • Pre-release Checks: Define a checklist of pre-release validations, including performance, security, and usability tests, to ensure quality

  • Release Notes: Prepare comprehensive release notes for each version, detailing new features, improvements, and bug fixes for customers.

  • It has to be clear which version of the code belongs to a release

  • Clear rollback strategy

  • Clear delivery process (includes providing of artifacts and communication to the customer)

  • migration concept

    • mainly changes to the db after changes to the schema → db migration task in sf

Steps

  • Agree on rules for semantic versioning. Suggestion:

    • Major Version (X.0.0): Increment for incompatible API changes or major changes that require backward-incompatible adjustments by the user.

    • Minor Version (0.X.0): Increment for adding functionality in a backward-compatible manner.

    • Patch Version (0.0.X): Increment for backward-compatible bug fixes that do not add new features but fix existing functionality.

    • Pre-release and Build Metadata: Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format (e.g. -dev)

  • Documentation of changes. Suggestion:

    • feature/fix branches for everyone (including frontend)

    • changelog.md file in repo

    • maintained by each dev with each PR

    • can be used for release notes

    • only concise information about the changes

  • Release notes:

    • Agree on a fixed structure for all upcoming releases (we already have something but lets explicitly agree)

    • use changelog for info about changes

    • written for the customer to understand new features and bugfixes → can contain more information and explenations about features (may also include background info for example)

  • Clean trunk based development

    • short lived feature branches: → sometimes difficult atm because we currently work at complex features

    • Testing & validation before each merge: → currently only possible by locally by hand. Suggestion: Pipeline for each PR and merge only possible after successful run→ ensures successful tests and build. Short lived deployment would also be possible (more steps needed).

    • Code review before each merge: → not possible for the frontend

    • endpoint “versioning” to ensure that the whole application stays stable even with changes that would break the backend frontend communication → new and breaking change is provided on a new and separate endpoint (was done for storage location)

      • a clear mechanism for this is needed if we expect to use this more often

    • each merge into the main trunk goes through pipeline and is automatically deployed:

      • backend testing, automatic build and deploy already in place

      • automatic regression tests would make sense with the growing complexity of the application

    • release branch / release tags to clearly identify code version that is delivered to the customer

    • agreement needed how to handle hot fixes

  • Rollback strategy

    • older releases should stay available

    • At the beginning with bosch as the only customer, this is out of our hands

    • Maybe we can think about a data backup strategy so we can recommend something to bosch to prevent problems once we are in production

  • Pre release checks possible checks - lets agree on what we want to have:

    1. Code Review: Ensure all changes have been reviewed and approved by qualified team members.

      1. could be ensured with repo restrictions (no pushing to main, no merging without approval) → currently not possible for frontend

    2. Unit Testing: Verify that unit tests cover new features and bug fixes, and all tests pass.

      1. backend: partially done with api-integration tests

      2. frontend: no tests atm

    3. Integration Testing: Ensure components work together as expected and the system functions correctly as a whole.

      1. backend: partially done with api-integration tests

      2. frontend: no tests atm, sometimes testing by hand

    4. Performance Testing: Assess system performance under expected load conditions to ensure it meets requirements.

      1. currently no mechanism in place

    5. Security Testing: Conduct vulnerability assessments and security scans to identify and fix security flaws.

      1. automatic pen testing is on its way (Patrick)

      2. dependency monitoring on github

    6. Usability Testing: Validate user interface and user experience improvements for intuitiveness and ease of use.

      1. done by hand

    7. Regression Testing: Check that new changes haven't adversely affected existing functionality.

      1. backend: partially done with api-integration tests

      2. frontend: no tests atm, sometimes testing by hand

    8. Final Build: Confirm the final build of the release branch/tag is ready for production, with all features integrated and all tests passed.

      1. backend tests have to pass, rest is done “by hand”

    9. Have a dedicated Deployment with the final build

      1. useful to do some of the above mentioned checks

      2. useful for demo/sprint review

      3. useful to have a env that mirrors the customers env → reproduce errors, communicate functionality etc.

  • Clear delivery process. Suggestion:

    • pre release checks (the ones that we agreed on at that point) passed

    • Release notes are ready

      • written

      • reviewed & approved

    • Artifacts of final build pushed to customer accessible repo

    • E-mail to the customer with release notes and info about new version.

      • lets agree on a structure of this email and what info should be contained (mention App version, Helm chart version, link release notes, mention major feature?)

    • Version that pushed to the customer repo deployed on the demo instance

Other points

  • helm chart versioning, and changelog is there a mechanism (planned) like the one for the application code.

  • why is the helm chart separate from the application code

    • could be changed in the future

    • would increase transparency

    • changes to helm chart would be included in changelog

  • No labels