├── .github ├── ISSUE_TEMPLATE │ └── config.yaml ├── renovate.json5 └── workflows │ ├── add-to-project.yml │ ├── release-generation.yaml │ ├── release.yaml │ └── test-release.yaml ├── .gitignore ├── README.md ├── RELEASE.md ├── code-of-conduct.md └── release-notes-fetcher ├── config ├── release-notes-fetcher-camunda-8.2.yaml ├── release-notes-fetcher-camunda-8.3.yaml ├── release-notes-fetcher-camunda-8.4.yaml ├── release-notes-fetcher-camunda-8.5.yaml ├── release-notes-fetcher-camunda-8.6.yaml └── release-notes-fetcher-camunda-8.7.yaml ├── fetch.go ├── go.mod ├── go.sum └── release-notes-template.txt /.github/ISSUE_TEMPLATE/config.yaml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | -------------------------------------------------------------------------------- /.github/renovate.json5: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": false 3 | } 4 | -------------------------------------------------------------------------------- /.github/workflows/add-to-project.yml: -------------------------------------------------------------------------------- 1 | name: Add to Project 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | - transferred 8 | 9 | jobs: 10 | add-to-project: 11 | name: Add issue to project 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Generate GitHub token 15 | uses: tibdex/github-app-token@v2 16 | id: generate-github-token 17 | with: 18 | app_id: ${{ secrets.GH_APP_ID_DISTRO_CI }} 19 | private_key: ${{ secrets.GH_APP_PRIVATE_KEY_DISTRO_CI}} 20 | - name: Add to project 21 | uses: actions/add-to-project@v1.0.2 22 | with: 23 | project-url: https://github.com/orgs/camunda/projects/33 24 | github-token: '${{ steps.generate-github-token.outputs.token }}' -------------------------------------------------------------------------------- /.github/workflows/release-generation.yaml: -------------------------------------------------------------------------------- 1 | name: "Release - Generation" 2 | 3 | on: 4 | push: 5 | tags: 6 | # Example: 8.4-gen1 7 | - 8\.\d+\+gen\d+ 8 | # Example: 8.6.0-alpha1 9 | - 8\.\d+\-alpha\d+ 10 | - 8\.\d+\.\d+ 11 | 12 | jobs: 13 | release_script: 14 | runs-on: ubuntu-latest 15 | name: Build release notes 16 | steps: 17 | - uses: actions/checkout@v4 18 | 19 | - name: Setup Go 20 | uses: actions/setup-go@v5 21 | with: 22 | go-version: "1.20" 23 | 24 | - name: Build 25 | working-directory: ./release-notes-fetcher 26 | run: go build 27 | 28 | - name: Generate token for Camunda GitHub org 29 | id: generate-camunda-github-token 30 | uses: tibdex/github-app-token@v2 31 | with: 32 | app_id: ${{ secrets.APP_ID }} 33 | private_key: ${{ secrets.APP_PRIVATE_KEY }} 34 | 35 | - name: Generate token for Camunda Cloud GitHub org 36 | id: generate-camunda-cloud-github-token 37 | uses: tibdex/github-app-token@v2 38 | with: 39 | app_id: ${{ secrets.APP_ID }} 40 | private_key: ${{ secrets.APP_PRIVATE_KEY }} 41 | installation_retrieval_mode: "repository" 42 | installation_retrieval_payload: "camunda-cloud/identity" 43 | 44 | - name: Set Camunda release tag var 45 | run: | 46 | echo "CAMUNDA_RELEASE_NAME=${GITHUB_REF_NAME}" >> "${GITHUB_ENV}" 47 | 48 | - name: Set Camunda application vars 49 | run: | 50 | CAMUNDA_VERSION="$(echo ${CAMUNDA_RELEASE_NAME} | awk -F '[+-]' '{print $1}')" 51 | CONFIG_FILE="release-notes-fetcher/config/release-notes-fetcher-camunda-${CAMUNDA_VERSION}.yaml" 52 | export GLOBAL_GITREF="$(yq '.gitRef.global' ${CONFIG_FILE})" 53 | 54 | # Generate env var from git ref for all apps. 55 | # This will generate env vars like "ZEEBE_GITREF". 56 | yq '.gitRef | omit(["global"]) | keys' "${CONFIG_FILE}" | sed 's/- //g' | 57 | while read APP_NAME; do 58 | APP_REF="$(APP_NAME=${APP_NAME} yq '.gitRef.[env(APP_NAME)] // env(GLOBAL_GITREF)' ${CONFIG_FILE})" 59 | echo "${APP_NAME^^}_GITREF=${APP_REF}" >> "${GITHUB_ENV}" 60 | done 61 | 62 | - name: Run release notes script 63 | working-directory: ./release-notes-fetcher 64 | run: set -o pipefail; ./release-notes-fetcher | tee release_notes.txt 65 | env: 66 | GITHUB_CAMUNDA_ACCESS_TOKEN: ${{ steps.generate-camunda-github-token.outputs.token }} 67 | GITHUB_CAMUNDA_CLOUD_ACCESS_TOKEN: ${{ steps.generate-camunda-cloud-github-token.outputs.token }} 68 | 69 | - name: Login to gh repo 70 | working-directory: ./release-notes-fetcher 71 | run: echo ${{ steps.generate-camunda-github-token.outputs.token }} | gh auth login --with-token 72 | 73 | - name: Edit release notes with output from script 74 | working-directory: ./release-notes-fetcher 75 | run: gh release edit --notes-file release_notes.txt -R camunda/camunda-platform ${CAMUNDA_RELEASE_NAME} 76 | 77 | - name: Create temporary directory for asset download/upload 78 | working-directory: ./release-notes-fetcher 79 | run: mkdir -p tmp 80 | 81 | # Tasklist binaries are uploaded to zeebes repo 82 | - name: Download Zeebe resources 83 | working-directory: ./release-notes-fetcher/tmp 84 | run: | 85 | gh release download "${ZEEBE_GITREF}" \ 86 | -R camunda/camunda \ 87 | -p "zbctl" \ 88 | -p "zbctl.sha1sum" \ 89 | -p "zbctl.exe" \ 90 | -p "zbctl.exe.sha1sum" \ 91 | -p "zbctl.darwin" \ 92 | -p "zbctl.darwin.sha1sum" \ 93 | -p "camunda-zeebe-${ZEEBE_GITREF}.tar.gz" \ 94 | -p "camunda-zeebe-${ZEEBE_GITREF}.tar.gz.sha1sum" \ 95 | -p "camunda-zeebe-${ZEEBE_GITREF}.zip" \ 96 | -p "camunda-zeebe-${ZEEBE_GITREF}.zip.sha1sum" \ 97 | -p "camunda-tasklist-${TASKLIST_GITREF}.zip" \ 98 | -p "camunda-tasklist-${TASKLIST_GITREF}.zip.sha1sum" \ 99 | -p "camunda-tasklist-${TASKLIST_GITREF}.tar.gz" \ 100 | -p "camunda-tasklist-${TASKLIST_GITREF}.tar.gz.sha1sum" 101 | 102 | - name: Parse major version number 103 | id: get-major-version 104 | run: echo ${CAMUNDA_RELEASE_NAME} | awk -F '+' '{print $1}' | (IFS=. read major minor patch && echo "MAJOR_VERSION=$major") >> "$GITHUB_OUTPUT" 105 | 106 | - name: Parse minor version number 107 | id: get-minor-version 108 | run: echo ${CAMUNDA_RELEASE_NAME} | awk -F '+' '{print $1}' | (IFS=. read major minor patch && echo "MINOR_VERSION=$minor") >> "$GITHUB_OUTPUT" 109 | 110 | - name: Download Operate resources from monorepo 111 | if: ${{ steps.get-major-version.outputs.MAJOR_VERSION == 8 && steps.get-minor-version.outputs.MINOR_VERSION == 5 }} 112 | working-directory: ./release-notes-fetcher/tmp 113 | run: | 114 | gh release download "operate-${OPERATE_GITREF}" \ 115 | -R camunda/camunda \ 116 | -p "camunda-operate-${OPERATE_GITREF}.zip" \ 117 | -p "camunda-operate-${OPERATE_GITREF}.zip.sha1sum" \ 118 | -p "camunda-operate-${OPERATE_GITREF}.tar.gz" \ 119 | -p "camunda-operate-${OPERATE_GITREF}.tar.gz.sha1sum" \ 120 | 121 | - name: Download Operate resources 122 | if: ${{ steps.get-major-version.outputs.MAJOR_VERSION == 8 && steps.get-minor-version.outputs.MINOR_VERSION < 5 }} 123 | working-directory: ./release-notes-fetcher/tmp 124 | run: | 125 | gh release download "${OPERATE_GITREF}" \ 126 | -R camunda/operate \ 127 | -p "camunda-operate-${OPERATE_GITREF}.zip" \ 128 | -p "camunda-operate-${OPERATE_GITREF}.zip.sha1sum" \ 129 | -p "camunda-operate-${OPERATE_GITREF}.tar.gz" \ 130 | -p "camunda-operate-${OPERATE_GITREF}.tar.gz.sha1sum" \ 131 | 132 | - name: Login to Camunda Cloud 133 | working-directory: ./release-notes-fetcher 134 | run: echo ${{ steps.generate-camunda-cloud-github-token.outputs.token }} | gh auth login --with-token 135 | 136 | - name: Download Identity resources 137 | working-directory: ./release-notes-fetcher/tmp 138 | run: | 139 | gh release download "${IDENTITY_GITREF}" \ 140 | -R camunda-cloud/identity \ 141 | -p "camunda-identity-${IDENTITY_GITREF}.tar.gz" \ 142 | -p "camunda-identity-${IDENTITY_GITREF}.tar.gz.sha1sum" \ 143 | -p "camunda-identity-${IDENTITY_GITREF}.zip" \ 144 | -p "camunda-identity-${IDENTITY_GITREF}.zip.sha1sum" 145 | 146 | - name: Login back to Camunda 147 | working-directory: ./release-notes-fetcher 148 | run: echo ${{ steps.generate-camunda-github-token.outputs.token }} | gh auth login --with-token 149 | 150 | - name: Upload resources 151 | working-directory: ./release-notes-fetcher/tmp 152 | run: gh release -R camunda/camunda-platform upload "${CAMUNDA_RELEASE_NAME}" * 153 | -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | tags: 4 | # Example: 8.4.1 5 | - 8\.\d+\.\d+ 6 | jobs: 7 | release_script: 8 | if: ! contains($GITHUB_REF_NAME, "+") 9 | runs-on: ubuntu-latest 10 | name: Build release script 11 | steps: 12 | - uses: actions/checkout@v4 13 | 14 | - name: Setup Go 15 | uses: actions/setup-go@v5 16 | with: 17 | go-version: "1.20" 18 | 19 | - name: Build 20 | working-directory: ./release-notes-fetcher 21 | run: go build 22 | 23 | - name: Generate token for Camunda GitHub org 24 | id: generate-camunda-github-token 25 | uses: tibdex/github-app-token@v2 26 | with: 27 | app_id: ${{ secrets.APP_ID }} 28 | private_key: ${{ secrets.APP_PRIVATE_KEY }} 29 | 30 | - name: Generate token for Camunda Cloud GitHub org 31 | id: generate-camunda-cloud-github-token 32 | uses: tibdex/github-app-token@v2 33 | with: 34 | app_id: ${{ secrets.APP_ID }} 35 | private_key: ${{ secrets.APP_PRIVATE_KEY }} 36 | installation_retrieval_mode: "repository" 37 | installation_retrieval_payload: "camunda-cloud/identity" 38 | 39 | - name: Run release notes script 40 | working-directory: ./release-notes-fetcher 41 | run: set -o pipefail; ./release-notes-fetcher | tee release_notes.txt 42 | env: 43 | GITHUB_CAMUNDA_ACCESS_TOKEN: ${{ steps.generate-camunda-github-token.outputs.token }} 44 | GITHUB_CAMUNDA_CLOUD_ACCESS_TOKEN: ${{ steps.generate-camunda-cloud-github-token.outputs.token }} 45 | 46 | - name: Login to gh repo 47 | working-directory: ./release-notes-fetcher 48 | run: echo ${{ steps.generate-camunda-github-token.outputs.token }} | gh auth login --with-token 49 | 50 | - name: Edit release notes with output from script 51 | working-directory: ./release-notes-fetcher 52 | run: gh release edit --notes-file release_notes.txt -R camunda/camunda-platform $GITHUB_REF_NAME 53 | 54 | - name: Create temporary directory for asset download/upload 55 | working-directory: ./release-notes-fetcher 56 | run: mkdir -p tmp 57 | 58 | # Tasklist binaries are uploaded to zeebes repo 59 | - name: Download Zeebe resources 60 | working-directory: ./release-notes-fetcher/tmp 61 | run: > 62 | gh release 63 | download "$GITHUB_REF_NAME" 64 | -R camunda/camunda 65 | -p "zbctl" 66 | -p "zbctl.sha1sum" 67 | -p "zbctl.exe" 68 | -p "zbctl.exe.sha1sum" 69 | -p "zbctl.darwin" 70 | -p "zbctl.darwin.sha1sum" 71 | -p "camunda-zeebe-$GITHUB_REF_NAME.tar.gz" 72 | -p "camunda-zeebe-$GITHUB_REF_NAME.tar.gz.sha1sum" 73 | -p "camunda-zeebe-$GITHUB_REF_NAME.zip" 74 | -p "camunda-zeebe-$GITHUB_REF_NAME.zip.sha1sum" 75 | -p "camunda-tasklist-$GITHUB_REF_NAME.zip" 76 | -p "camunda-tasklist-$GITHUB_REF_NAME.zip.sha1sum" 77 | -p "camunda-tasklist-$GITHUB_REF_NAME.tar.gz" 78 | -p "camunda-tasklist-$GITHUB_REF_NAME.tar.gz.sha1sum" 79 | 80 | - name: Parse major version number 81 | id: get-major-version 82 | run: echo "$GITHUB_REF_NAME" | (IFS=. read major minor patch && echo "MAJOR_VERSION=$major") >> "$GITHUB_OUTPUT" 83 | 84 | - name: Parse minor version number 85 | id: get-minor-version 86 | run: echo "$GITHUB_REF_NAME" | (IFS=. read major minor patch && echo "MINOR_VERSION=$minor") >> "$GITHUB_OUTPUT" 87 | 88 | - name: Download Operate resources from monorepo 89 | if: ${{ steps.get-major-version.outputs.MAJOR_VERSION == 8 && steps.get-minor-version.outputs.MINOR_VERSION >= 5 }} 90 | working-directory: ./release-notes-fetcher/tmp 91 | run: > 92 | gh release 93 | download "operate-$GITHUB_REF_NAME" 94 | -R camunda/camunda 95 | -p "camunda-operate-$GITHUB_REF_NAME.zip" 96 | -p "camunda-operate-$GITHUB_REF_NAME.zip.sha1sum" 97 | -p "camunda-operate-$GITHUB_REF_NAME.tar.gz" 98 | -p "camunda-operate-$GITHUB_REF_NAME.tar.gz.sha1sum" 99 | 100 | - name: Download Operate resources 101 | if: ${{ steps.get-major-version.outputs.MAJOR_VERSION == 8 && steps.get-minor-version.outputs.MINOR_VERSION < 5 }} 102 | working-directory: ./release-notes-fetcher/tmp 103 | run: > 104 | gh release 105 | download "$GITHUB_REF_NAME" 106 | -R camunda/operate 107 | -p "camunda-operate-$GITHUB_REF_NAME.zip" 108 | -p "camunda-operate-$GITHUB_REF_NAME.zip.sha1sum" 109 | -p "camunda-operate-$GITHUB_REF_NAME.tar.gz" 110 | -p "camunda-operate-$GITHUB_REF_NAME.tar.gz.sha1sum" 111 | 112 | - name: Login to Camunda Cloud 113 | working-directory: ./release-notes-fetcher 114 | run: echo ${{ steps.generate-camunda-cloud-github-token.outputs.token }} | gh auth login --with-token 115 | 116 | - name: Download Identity resources 117 | working-directory: ./release-notes-fetcher/tmp 118 | run: > 119 | gh release 120 | download "$GITHUB_REF_NAME" 121 | -R camunda-cloud/identity 122 | -p "camunda-identity-$GITHUB_REF_NAME.tar.gz" 123 | -p "camunda-identity-$GITHUB_REF_NAME.tar.gz.sha1sum" 124 | -p "camunda-identity-$GITHUB_REF_NAME.zip" 125 | -p "camunda-identity-$GITHUB_REF_NAME.zip.sha1sum" 126 | 127 | - name: Login back to Camunda 128 | working-directory: ./release-notes-fetcher 129 | run: echo ${{ steps.generate-camunda-github-token.outputs.token }} | gh auth login --with-token 130 | 131 | - name: Upload resources 132 | working-directory: ./release-notes-fetcher/tmp 133 | run: gh release -R camunda/camunda-platform upload "$GITHUB_REF_NAME" * 134 | -------------------------------------------------------------------------------- /.github/workflows/test-release.yaml: -------------------------------------------------------------------------------- 1 | name: "Test release notes script" 2 | on: 3 | push: 4 | branches: 5 | - "**" 6 | 7 | jobs: 8 | release_script: 9 | runs-on: ubuntu-latest 10 | name: Build release script 11 | steps: 12 | - uses: actions/checkout@v4 13 | 14 | - name: Setup Go 15 | uses: actions/setup-go@v5 16 | with: 17 | go-version: "1.20" 18 | 19 | - name: Build 20 | working-directory: ./release-notes-fetcher 21 | run: go build 22 | 23 | - name: Generate token for Camunda GitHub org 24 | id: generate-camunda-github-token 25 | uses: tibdex/github-app-token@v2 26 | with: 27 | app_id: ${{ secrets.APP_ID }} 28 | private_key: ${{ secrets.APP_PRIVATE_KEY }} 29 | 30 | - name: Generate token for Camunda Cloud GitHub org 31 | id: generate-camunda-cloud-github-token 32 | uses: tibdex/github-app-token@v2 33 | with: 34 | app_id: ${{ secrets.APP_ID }} 35 | private_key: ${{ secrets.APP_PRIVATE_KEY }} 36 | installation_retrieval_mode: "repository" 37 | installation_retrieval_payload: "camunda-cloud/identity" 38 | 39 | - name: Run release notes script 40 | working-directory: ./release-notes-fetcher 41 | # The var CAMUNDA_RELEASE_NAME should be the same as GITHUB_REF_NAME but it's hard-coded as 8.3.1 tag 42 | # and we just want to see if a valid version can fetch notes 43 | run: set -o pipefail; CAMUNDA_RELEASE_NAME=8.5.1 ./release-notes-fetcher | tee release_notes.txt 44 | env: 45 | GITHUB_CAMUNDA_ACCESS_TOKEN: ${{ steps.generate-camunda-github-token.outputs.token }} 46 | GITHUB_CAMUNDA_CLOUD_ACCESS_TOKEN: ${{ steps.generate-camunda-cloud-github-token.outputs.token }} 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .envrc 3 | release-notes-fetcher/release-notes-fetcher 4 | e2e_tests/playwright-report 5 | e2e_tests/test-results 6 | e2e_tests/node_modules 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Camunda 8 2 | 3 | > [!CAUTION] 4 | > 5 | > Since Camunda 8.7 (April 2025), this repository is used only for the release notes of Camunda <= 8.5, for Camunda >= 8.6 please check [camunda/camunda](https://github.com/camunda/camunda) repository. 6 | > For Docker Compose, check out the [Docker Compose guide](https://docs.camunda.io/docs/self-managed/setup/deploy/local/docker-compose) to download and run the Docker Compose artifacts directly instead. 7 | -------------------------------------------------------------------------------- /RELEASE.md: -------------------------------------------------------------------------------- 1 | # Release process 2 | 3 | This repository is used for the release notes of Camunda <= 8.5, for Camunda >= 8.6 please check [camunda/camunda](https://github.com/camunda/camunda) 4 | 5 | ## How to generate release notes 6 | 7 | 1. Navigate to the [Releases page](https://github.com/camunda/camunda-platform/releases) 8 | 2. Click "Draft a new release" 9 | 3. Create a tag named the version number 10 | 4. Target the branch of the stable/x.x version you're releasing (or main) 11 | 5. Add a release title 12 | 6. Publish Release 13 | 7. Ensure the CI workflow completes successfully: [Release workflow](https://github.com/camunda/camunda-platform/actions/workflows/release.yaml) 14 | 8. Make sure the release notes show up here with the necessary artifacts: [Releases](https://github.com/camunda/camunda-platform/releases) 15 | -------------------------------------------------------------------------------- /code-of-conduct.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | ## Our community is what makes us who we are 4 | 5 | ### Community standards 6 | 7 | We want to provide each and every one of you with a consistently great experience, so we created this Community Code of Conduct. We want to ensure mutual support will always be guaranteed and that we create an environment in which we can grow together. 8 | 9 | Please remember to be kind, and follow the Camunda Code of Conduct when interacting with other Camunda community members. Keep in mind that communication styles vary, and no two individuals communicate in the same way. Please do your best to remain helpful, and try to avoid making sweeping demands whenever possible. 10 | 11 | It is expected that project maintainers will follow the Code of Conduct when interacting with community members, and the same holds true for community members interacting with project maintainers. 12 | 13 | ### Scope 14 | 15 | We expect all members of the Camunda community, including administrators, users, facilitators, and vendors to abide by this Code of Conduct at all times. 16 | 17 | The Camunda Code of Conduct applies to all our Camunda projects and products, including but not limited to Camunda Platform 7, Camunda Cloud, the Camunda Community Hub, and bpmn-io. It also applies to all Camunda events. This includes official Camunda events, such as CamundaCon, Camunda Process Automation Forums, Camunda meetups, trainings, workshops, and unofficial Camunda events. 18 | 19 | The Camunda Community Code of Conduct also applies to any Camunda online space. This includes Slack workspaces, discussion forums, websites, code repositories, mailing lists, and more. The Camunda Community Code of Conduct also applies to private correspondence between community members through our online spaces. 20 | 21 | We trust all of our community members will help to create a safe and welcoming environment for everyone. 22 | 23 | ### Creating a harassment-free space 24 | 25 | We are dedicated to providing a harassment-free community space for everyone, regardless of gender, gender identity and expression, sexual orientation, disability, physical appearance, body size, ethnicity, age, physical appearance, religion, or similar personal characteristics. 26 | 27 | We do not tolerate harassment of other Camunda users in any form, whether publicly or privately. Harassment includes, but is not limited to: harmful or prejudicial verbal or written comments, inappropriate use of nudity, sexual images, and/or sexually explicit language in public spaces, threats of physical or non-physical harm, deliberate intimidation, stalking or following, harassing photography or recording, sustained disruption of talks or other events, inappropriate physical contact, and unwelcome sexual attention. 28 | 29 | In addition, any spamming, trolling, flaming, baiting, or other attention-stealing behavior is not welcome, and will not be tolerated. 30 | 31 | ### Community guidelines 32 | 33 | We have put together a few guidelines that we ask community members to adhere to. By being explicit about them, we want to ensure the Camunda community continues to be a supportive place for everyone: 34 | 35 | * Mutual respect: No matter if you are an administrator, user, facilitator, or vendor, please beware of inappropriate behavior and wording at any time. 36 | * Camunda stands for open communication, respectful interaction, and transparency. Please keep that in mind as we strive for an inspiring environment where every single member and participant feels welcome. 37 | * Effective communication: “To effectively communicate, we must realize that we are all different in the way we perceive the world and use this understanding as a guide to our communication with others” (Tony Robbins). By listening to understand rather than to respond, we create a highly productive environment where all community members, no matter what language or background, are able to communicate effectively. 38 | * Mindfulness: Please be mindful of the space, as well as people and their actions around you. We always co-create and every single action can have a major impact on the event or even the community. To create this safe, supportive, and highly productive space, we need to work together and hold each other accountable. 39 | * Request and provide support: Our online as well as offline platforms are meant to support exchange and mutual help. Please be open with your requests and questions as there is a good chance not only you, but the whole community can benefit from starting the conversation. In return, please be open to share your knowledge and experience to be an active member of the community. 40 | * No tolerance for harassment: We do not tolerate harassment of other Camunda community members in any form, whether publicly or privately. See our community guidelines above for further specification of types of harassment. 41 | 42 | * Reporting violations: Harassment and other code of conduct violations reduce the value of our community for everyone. We want you to be happy when engaging with the broader Camunda community. If someone makes you or anyone else feel unsafe or unwelcome, [report it as soon as possible]. To help us make the community a better place, please include as much detail as possible in your report so that we have more or applicable context. 43 | * If an issue is or was able to be documented, it is helpful to include screenshots with identifying information removed if you do not feel comfortable sharing it. 44 | 45 | ### Violations to the Camunda Community Code of Conduct 46 | 47 | Harassment and unacceptable behavior from any community member, including employees, sponsors, customers, partners, event organizers, or others with decision-making authority, will not be tolerated. 48 | 49 | Anyone asked to stop unacceptable behavior is expected to comply immediately. If a community member engages in unacceptable behavior, the Camunda administrators may take any action they deem appropriate, up to and including a temporary or permanent ban from the community without warning and without refund in the case of a paid event or service. 50 | 51 | ### Communication styles 52 | 53 | When communicating with others on the Camunda Cloud Community forums or in Slack, it’s important to remember that not everyone communicates in the same way. Some individuals may be [neurodivergent], and thus may not communicate in a neurotypical manner. Please endeavor to understand [neurological differences] when communicating with other community members so this space welcomes everyone. 54 | 55 | Others may learn or understand information differently from you. While someone may understand a diagram or model at first glance, others may benefit from having a paragraph or two of information to read that explains what the diagram, model, or example does. Remember that what may seem obvious to you may not be to someone else. 56 | 57 | We all come from different backgrounds and experiences. As such, keep in mind that not everyone has had access to the same learning tools, education, and experience that you may have. What may seem like an easy or quick solution for you may be difficult to understand, or challenging to implement for someone else. 58 | 59 | Above all, please be compassionate and empathetic when communicating with others. 60 | 61 | [report it as soon as possible]: https://camunda.com/events/code-conduct/reporting-violations/ 62 | [neurodivergent]: https://autisticuk.org/neurodiversity/ 63 | [neurological differences]: https://www.bbc.co.uk/neurodiversity -------------------------------------------------------------------------------- /release-notes-fetcher/config/release-notes-fetcher-camunda-8.2.yaml: -------------------------------------------------------------------------------- 1 | gitRef: 2 | global: 8.2.31 3 | operate: 8.2.30 4 | identity: 8.2.31 5 | tasklist: 8.2.31 6 | zeebe: 8.2.31 7 | -------------------------------------------------------------------------------- /release-notes-fetcher/config/release-notes-fetcher-camunda-8.3.yaml: -------------------------------------------------------------------------------- 1 | gitRef: 2 | global: 8.3.15 3 | operate: 4 | identity: 5 | tasklist: 8.3.16 6 | zeebe: 7 | -------------------------------------------------------------------------------- /release-notes-fetcher/config/release-notes-fetcher-camunda-8.4.yaml: -------------------------------------------------------------------------------- 1 | gitRef: 2 | global: 8.4.11 3 | operate: 8.4.10 4 | identity: 5 | tasklist: 8.4.12 6 | zeebe: 7 | -------------------------------------------------------------------------------- /release-notes-fetcher/config/release-notes-fetcher-camunda-8.5.yaml: -------------------------------------------------------------------------------- 1 | gitRef: 2 | global: 8.5.7 3 | operate: 8.5.7 4 | identity: 8.5.5 5 | tasklist: 8.5.7 6 | zeebe: 8.5.7 7 | -------------------------------------------------------------------------------- /release-notes-fetcher/config/release-notes-fetcher-camunda-8.6.yaml: -------------------------------------------------------------------------------- 1 | gitRef: 2 | global: 8.6.7 3 | operate: 4 | identity: 5 | tasklist: 6 | zeebe: 7 | -------------------------------------------------------------------------------- /release-notes-fetcher/config/release-notes-fetcher-camunda-8.7.yaml: -------------------------------------------------------------------------------- 1 | gitRef: 2 | global: 8.7.0-alpha3 3 | operate: 4 | identity: 5 | tasklist: 6 | zeebe: 7 | -------------------------------------------------------------------------------- /release-notes-fetcher/fetch.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "context" 5 | "fmt" 6 | "io" 7 | "os" 8 | "regexp" 9 | "text/template" 10 | 11 | "github.com/Masterminds/semver/v3" 12 | "github.com/google/go-github/v54/github" 13 | "github.com/rs/zerolog" 14 | "github.com/rs/zerolog/log" 15 | "golang.org/x/oauth2" 16 | ) 17 | 18 | const RepoOwner = "camunda" 19 | const CloudRepoOwner = "camunda-cloud" 20 | const MainRepoName = "camunda-platform" 21 | const ZeebeRepoName = "camunda" 22 | const TasklistRepoName = "tasklist" 23 | const IdentityRepoName = "identity" 24 | const ReleaseNotesTemplateFileName = "release-notes-template.txt" 25 | 26 | type CamundaPlatformRelease struct { 27 | Overview string 28 | ZeebeReleaseNotes string 29 | OperateReleaseNotes string 30 | TasklistReleaseNotes string 31 | IdentityReleaseNotes string 32 | } 33 | 34 | type camundaAppVersions struct { 35 | Zeebe string 36 | Operate string 37 | Tasklist string 38 | Identity string 39 | } 40 | 41 | func GetChangelogReleaseContents(ctx context.Context, 42 | repoName string, 43 | changelogFileName string, 44 | repoService *github.RepositoriesService, 45 | githubRef string) string { 46 | opts := github.RepositoryContentGetOptions{ 47 | Ref: githubRef, 48 | } 49 | operateChangeLogReader, response, err := repoService.DownloadContents(ctx, 50 | RepoOwner, 51 | repoName, 52 | changelogFileName, 53 | &opts) 54 | if err != nil || response.StatusCode != 200 { 55 | log.Error().Stack().Err(err).Msg("an error has occurred") 56 | os.Exit(1) 57 | } 58 | 59 | bytes, err := io.ReadAll(operateChangeLogReader) 60 | if err != nil { 61 | log.Error().Stack().Err(err).Msg("an error has occurred") 62 | os.Exit(1) 63 | } 64 | // operateChangeLogString := string(bytes) 65 | latestReleaseRegex, err := regexp.Compile(`(?s)(?m)# .*?(?:^# )`) 66 | if err != nil { 67 | log.Error().Stack().Err(err).Msg("an error has occurred") 68 | os.Exit(1) 69 | } 70 | mostRecentChangeLog := latestReleaseRegex.Find(bytes) 71 | var firstNewlineIndex int 72 | for i, s := range mostRecentChangeLog { 73 | if s == '\n' { 74 | firstNewlineIndex = i 75 | break 76 | } 77 | } 78 | mostRecentChangeLogString := string(mostRecentChangeLog[firstNewlineIndex : len(mostRecentChangeLog)-2]) 79 | return mostRecentChangeLogString 80 | } 81 | 82 | func GetLatestReleaseContents(ctx context.Context, 83 | orgName string, 84 | repoName string, 85 | repoService *github.RepositoriesService, 86 | githubRef string) string { 87 | 88 | githubRelease, response, err := repoService.GetReleaseByTag(ctx, orgName, repoName, githubRef) 89 | if err != nil || response.StatusCode != 200 { 90 | log.Error().Stack().Err(err).Msg("An error has occurred") 91 | os.Exit(1) 92 | } 93 | return *githubRelease.Body 94 | } 95 | 96 | func getEnv(key, fallback string) string { 97 | if value, ok := os.LookupEnv(key); ok { 98 | return value 99 | } 100 | return fallback 101 | } 102 | 103 | func releaseOverview(cav camundaAppVersions) string { 104 | releaseOverview := ` 105 | Camunda application in this release generation: 106 | - Identity: %s 107 | - Operate: %s 108 | - Tasklist: %s 109 | - Zeebe: %s 110 | ` 111 | return fmt.Sprintf(releaseOverview, 112 | cav.Identity, 113 | cav.Operate, 114 | cav.Tasklist, 115 | cav.Zeebe, 116 | ) 117 | } 118 | 119 | func main() { 120 | var temp = template.Must(template.ParseFiles(ReleaseNotesTemplateFileName)) 121 | 122 | camundaTokenSource := oauth2.StaticTokenSource( 123 | &oauth2.Token{AccessToken: os.Getenv("GITHUB_CAMUNDA_ACCESS_TOKEN")}, 124 | ) 125 | 126 | camundaReleaseVersion := getEnv("CAMUNDA_RELEASE_NAME", os.Getenv("GITHUB_REF_NAME")) 127 | camundaAppVersions := camundaAppVersions{ 128 | Identity: getEnv("IDENTITY_GITREF", camundaReleaseVersion), 129 | Operate: getEnv("OPERATE_GITREF", camundaReleaseVersion), 130 | Tasklist: getEnv("TASKLIST_GITREF", camundaReleaseVersion), 131 | Zeebe: getEnv("ZEEBE_GITREF", camundaReleaseVersion), 132 | } 133 | 134 | ctx := context.TODO() 135 | camundaOAuthClient := oauth2.NewClient(ctx, camundaTokenSource) 136 | 137 | zerolog.TimeFieldFormat = zerolog.TimeFormatUnix 138 | log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) 139 | 140 | camundaGithubClient := github.NewClient(camundaOAuthClient) 141 | 142 | camundaRepoService := camundaGithubClient.Repositories 143 | 144 | log.Debug().Msg("Camunda Github ref = " + camundaReleaseVersion) 145 | log.Debug().Msg("Zeebe Github ref = " + camundaAppVersions.Zeebe) 146 | log.Debug().Msg("Tasklist Github ref = " + camundaAppVersions.Tasklist) 147 | log.Debug().Msg("Operate Github ref = " + camundaAppVersions.Operate) 148 | log.Debug().Msg("Identity Github ref = " + camundaAppVersions.Identity) 149 | 150 | zeebeReleaseNotes := GetLatestReleaseContents( 151 | ctx, 152 | RepoOwner, 153 | ZeebeRepoName, 154 | camundaRepoService, 155 | camundaAppVersions.Zeebe, 156 | ) 157 | 158 | operateMonoRepoVersion, operateMonoErr := semver.NewVersion("8.5.0") 159 | if operateMonoErr != nil { 160 | log.Error().Stack().Err(operateMonoErr).Msg("Error parsing 8.5.0 version:") 161 | return 162 | } 163 | 164 | operateCurrentVersion, err := semver.NewVersion(camundaAppVersions.Operate) 165 | if err != nil { 166 | log.Error().Stack().Err(err).Msg("Error parsing operate version:") 167 | return 168 | } 169 | 170 | var OperateRepoTag = "" 171 | var OperateRepoName = "" 172 | operateSingleAppVersion, _ := semver.NewVersion("8.6.0-alpha1") 173 | if operateCurrentVersion.LessThan(operateMonoRepoVersion) { 174 | OperateRepoName = "operate" 175 | OperateRepoTag = camundaAppVersions.Operate 176 | } else if operateCurrentVersion.LessThan(operateSingleAppVersion) { 177 | OperateRepoName = "camunda" 178 | OperateRepoTag = "operate-" + camundaAppVersions.Operate 179 | } 180 | 181 | operateReleaseNotesContents := "" 182 | if operateCurrentVersion.LessThan(operateSingleAppVersion) { 183 | operateReleaseNotesContents = GetLatestReleaseContents( 184 | ctx, 185 | RepoOwner, 186 | OperateRepoName, 187 | camundaRepoService, 188 | OperateRepoTag, 189 | ) 190 | } 191 | 192 | var tasklistReleaseNotesContents = "" 193 | tasklistSingleAppVersion, _ := semver.NewVersion("8.6.0-alpha1") 194 | tasklistCurrentVersion, err := semver.NewVersion(camundaAppVersions.Tasklist) 195 | if err != nil { 196 | log.Error().Stack().Err(err).Msg("Error parsing Tasklist version:") 197 | return 198 | } 199 | 200 | if tasklistCurrentVersion.LessThan(tasklistSingleAppVersion) { 201 | tasklistReleaseNotesContents = GetChangelogReleaseContents( 202 | ctx, 203 | TasklistRepoName, 204 | "CHANGELOG.md", 205 | camundaRepoService, 206 | camundaAppVersions.Tasklist, 207 | ) 208 | } 209 | 210 | camundaCloudTokenSource := oauth2.StaticTokenSource( 211 | &oauth2.Token{AccessToken: os.Getenv("GITHUB_CAMUNDA_CLOUD_ACCESS_TOKEN")}, 212 | ) 213 | camundaCloudOAuthClient := oauth2.NewClient(ctx, camundaCloudTokenSource) 214 | camundaCloudGithubClient := github.NewClient(camundaCloudOAuthClient) 215 | camundaCloudRepoService := camundaCloudGithubClient.Repositories 216 | 217 | identityReleaseNotesContents := GetLatestReleaseContents( 218 | ctx, 219 | CloudRepoOwner, 220 | IdentityRepoName, 221 | camundaCloudRepoService, 222 | camundaAppVersions.Identity, 223 | ) 224 | 225 | // Remove the Zeebe version at the beginning of Zeebe release notes to avoid confusion. 226 | zeebeRegex := regexp.MustCompile(`# Release 8\..+\n`) 227 | zeebeReleaseNotes = zeebeRegex.ReplaceAllString(zeebeReleaseNotes, "") 228 | 229 | platformRelease := CamundaPlatformRelease{ 230 | Overview: releaseOverview(camundaAppVersions), 231 | ZeebeReleaseNotes: zeebeReleaseNotes, 232 | OperateReleaseNotes: operateReleaseNotesContents, 233 | TasklistReleaseNotes: tasklistReleaseNotesContents, 234 | IdentityReleaseNotes: identityReleaseNotesContents, 235 | } 236 | 237 | err = temp.Execute(os.Stdout, platformRelease) 238 | if err != nil { 239 | log.Error().Stack().Err(err).Msg("could not parse template file") 240 | os.Exit(1) 241 | } 242 | } 243 | -------------------------------------------------------------------------------- /release-notes-fetcher/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/camunda/camunda-platform/release-notes-fetcher 2 | 3 | go 1.19 4 | 5 | require ( 6 | github.com/google/go-github/v54 v54.0.0 7 | github.com/rs/zerolog v1.31.0 8 | golang.org/x/oauth2 v0.13.0 9 | ) 10 | 11 | require ( 12 | github.com/Masterminds/semver/v3 v3.2.1 // indirect 13 | github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect 14 | github.com/cloudflare/circl v1.3.7 // indirect 15 | github.com/golang/protobuf v1.5.3 // indirect 16 | github.com/google/go-querystring v1.1.0 // indirect 17 | github.com/mattn/go-colorable v0.1.13 // indirect 18 | github.com/mattn/go-isatty v0.0.19 // indirect 19 | golang.org/x/crypto v0.17.0 // indirect 20 | golang.org/x/net v0.17.0 // indirect 21 | golang.org/x/sys v0.15.0 // indirect 22 | google.golang.org/appengine v1.6.7 // indirect 23 | google.golang.org/protobuf v1.33.0 // indirect 24 | ) 25 | -------------------------------------------------------------------------------- /release-notes-fetcher/go.sum: -------------------------------------------------------------------------------- 1 | github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= 2 | github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= 3 | github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA= 4 | github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= 5 | github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= 6 | github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= 7 | github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= 8 | github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= 9 | github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 10 | github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 11 | github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 12 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= 13 | github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= 14 | github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= 15 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 16 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 17 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 18 | github.com/google/go-github/v54 v54.0.0 h1:OZdXwow4EAD5jEo5qg+dGFH2DpkyZvVsAehjvJuUL/c= 19 | github.com/google/go-github/v54 v54.0.0/go.mod h1:Sw1LXWHhXRZtzJ9LI5fyJg9wbQzYvFhW8W5P2yaAQ7s= 20 | github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= 21 | github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= 22 | github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= 23 | github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= 24 | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 25 | github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= 26 | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 27 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 28 | github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= 29 | github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= 30 | github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= 31 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 32 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 33 | golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= 34 | golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= 35 | golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 36 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 37 | golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= 38 | golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= 39 | golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= 40 | golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= 41 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 42 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 43 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 44 | golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 45 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 46 | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 47 | golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 48 | golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= 49 | golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 50 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 51 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 52 | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 53 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 54 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 55 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 56 | google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= 57 | google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 58 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= 59 | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 60 | google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= 61 | google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 62 | -------------------------------------------------------------------------------- /release-notes-fetcher/release-notes-template.txt: -------------------------------------------------------------------------------- 1 | # Overview 2 | {{ .Overview }} 3 | 4 | # Identity 5 | {{ .IdentityReleaseNotes }} 6 | 7 | # Operate 8 | {{ .OperateReleaseNotes }} 9 | 10 | # Tasklist 11 | {{ .TasklistReleaseNotes }} 12 | 13 | # Zeebe 14 | {{ .ZeebeReleaseNotes }} 15 | --------------------------------------------------------------------------------