From 1ac3f50acfe81311f7268f11c2a73f85639059cb Mon Sep 17 00:00:00 2001 From: Jeroen Dries Date: Tue, 22 Apr 2025 15:56:08 +0200 Subject: [PATCH 1/2] add udp versioning https://github.com/ESA-APEx/apex_documentation/issues/84 --- guides/udp_writer_guide.qmd | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/guides/udp_writer_guide.qmd b/guides/udp_writer_guide.qmd index 6f7c1a0..8c74b83 100644 --- a/guides/udp_writer_guide.qmd +++ b/guides/udp_writer_guide.qmd @@ -34,6 +34,25 @@ with APEx. It is however advisable for your UDP to link back to a public git repository if available, making your open source code more discoverable. +#### UDP versioning + +APEx requires you to use versioning, to ensure that changes in your algorithm are clearly communicated and visible to users. +A good way to do this is to use [semantic versioning](https://semver.org/), which is a widely used versioning scheme. + +In combination with git tags, this allows you to easily track different versions of your UDP JSON, and share immutable links to +specific versions. In addition, you can also create tags that always point to the latest development or stable version. + +One use case is an algorithm change that requires you to change parameters. We refer to such a change as 'backward incompatible', +because users of the existing algorithm will not be able to switch to the new version without an update on their side. +In such a case, you can create a new UDP version, and keep the old one available for users that are not ready to switch yet. +Also in the UDP catalog, we recommend to keep both versions side-by-side for a certain time frame before removing the old one. + +A changelog is also required, to document the changes between versions. Guidance on how to keep changelogs can be found +[online](https://keepachangelog.com/en/1.1.0/). + +It is not mandatory to store your UDP JSON in the APEx git repository, especially if the project already maintains an open +source (git) repository. The APEx repository is only a suggestion, which can be convenient if you do not have an alternative. + ### How many UDPs should I write? Deciding on the granularity of your UDP is an important aspect of making your algorithm usable. There is no need to try From aff63d61f89c242ade74beeb1e087fe703084d9e Mon Sep 17 00:00:00 2001 From: Jeroen Dries Date: Wed, 30 Apr 2025 15:02:20 +0200 Subject: [PATCH 2/2] versioning: add example --- guides/images/versioning_tags.png | Bin 0 -> 55543 bytes guides/udp_writer_guide.qmd | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 guides/images/versioning_tags.png diff --git a/guides/images/versioning_tags.png b/guides/images/versioning_tags.png new file mode 100644 index 0000000000000000000000000000000000000000..33bd78aca36d53de7f6b6960ef3e896024f7e53f GIT binary patch literal 55543 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 literal 0 HcmV?d00001 diff --git a/guides/udp_writer_guide.qmd b/guides/udp_writer_guide.qmd index 8c74b83..cf33112 100644 --- a/guides/udp_writer_guide.qmd +++ b/guides/udp_writer_guide.qmd @@ -53,6 +53,11 @@ A changelog is also required, to document the changes between versions. Guidance It is not mandatory to store your UDP JSON in the APEx git repository, especially if the project already maintains an open source (git) repository. The APEx repository is only a suggestion, which can be convenient if you do not have an alternative. +As an example, the image below shows how one project effectively used git tags to version multiple UDP's +that are hosted on GitHub. In this case, these tags exist alongside regular software version tags! + +![git tags example](./images/versioning_tags.png){width=75%} + ### How many UDPs should I write? Deciding on the granularity of your UDP is an important aspect of making your algorithm usable. There is no need to try