From 1d07a861fc5cedff85eb7c4e2e3f17253716b358 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 1 Nov 2023 09:01:52 +0100 Subject: [PATCH] Add scheduled releases and comprehensive release notes Adjusted the GitHub Actions workflow to include two scheduled releases at 4:15 CET (main branch) and 9:15 CET (release branch) per day. The release notes now have a more comprehensive and detailed structure, with current nightly or beta branch statuses for different sections such as nightlies, unit test results, and Conan packages. --- .github/workflows/installers.yml | 55 ++++++++++++++++++------ .github/workflows/release_notes.md.jinja | 39 +++++++++++++++++ 2 files changed, 82 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/release_notes.md.jinja diff --git a/.github/workflows/installers.yml b/.github/workflows/installers.yml index fa2f73998b..a1bd2a415b 100644 --- a/.github/workflows/installers.yml +++ b/.github/workflows/installers.yml @@ -31,8 +31,9 @@ on: type: boolean schedule: - # Daily at 5:15 CET - - cron: '15 3 * * *' + # Daily at 4:15 CET (main-branch) and 9:15 CET (release-branch) + - cron: '15 2 * * *' + - cron: '15 8 * * *' env: CURA_CONAN_VERSION: ${{ inputs.cura_conan_version || 'cura/latest@ultimaker/testing' }} @@ -52,7 +53,19 @@ jobs: shell: python run: | import os - cura_conan_version = "cura/latest@ultimaker/testing" if "${{ github.event.inputs.cura_conan_version }}" == "" else "${{ github.event.inputs.cura_conan_version }}" + import datetime + cura_conan_version = "cura/latest@ultimaker/testing" + release_tag = "nightly" + + # Get current UTC time + now = datetime.datetime.utcnow() + + # Check if current hour is 8 + if now.hour == 8: + cura_conan_version = "cura/latest@ultimaker/stable" + release_tag = "nightly-5.6" + + # Set cura_conan_version environment variable output_env = os.environ["GITHUB_OUTPUT"] content = "" if os.path.exists(output_env): @@ -61,6 +74,7 @@ jobs: with open(output_env, "w") as f: f.write(content) f.writelines(f"cura_conan_version={cura_conan_version}\n") + f.writelines(f"release_tag={release_tag}\n") windows-installer: uses: ./.github/workflows/windows.yml @@ -182,8 +196,8 @@ jobs: - name: Update nightly release for Linux run: | - gh release upload nightly installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-linux-X64.AppImage --clobber - gh release upload nightly installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-linux-X64.AppImage.asc --clobber + gh release upload ${{ needs.default-values.outputs.release_tag }} installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-linux-X64.AppImage --clobber + gh release upload ${{ needs.default-values.outputs.release_tag }} installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-linux-X64.AppImage.asc --clobber env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -206,8 +220,8 @@ jobs: - name: Update nightly release for Windows run: | - gh release upload nightly installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-win64-X64.msi --clobber - gh release upload nightly installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-win64-X64.exe --clobber + gh release upload ${{ needs.default-values.outputs.release_tag }} installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-win64-X64.msi --clobber + gh release upload ${{ needs.default-values.outputs.release_tag }} installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-win64-X64.exe --clobber env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -230,8 +244,8 @@ jobs: - name: Update nightly release for MacOS (X64) run: | - gh release upload nightly installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-X64.dmg --clobber - gh release upload nightly installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-X64.pkg --clobber + gh release upload ${{ needs.default-values.outputs.release_tag }} installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-X64.dmg --clobber + gh release upload ${{ needs.default-values.outputs.release_tag }} installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-X64.pkg --clobber env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -254,14 +268,31 @@ jobs: - name: Update nightly release for MacOS (ARM-64) run: | - gh release upload nightly installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-ARM64.dmg --clobber - gh release upload nightly installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-ARM64.pkg --clobber + gh release upload ${{ needs.default-values.outputs.release_tag }} installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-ARM64.dmg --clobber + gh release upload ${{ needs.default-values.outputs.release_tag }} installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-ARM64.pkg --clobber env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: create the release notes + run: | + import os + import datetime + from jinja2 import Template + + with open(".github/workflows/release-notes.md.jinja", "r") as f: + release_notes = Template(f.read()) + + current_nightly_beta = "${{ needs.default-values.outputs.release_tag }}".split("nightly-")[-1] + with open("release-notes.md", "w") as f: + f.write(release_notes.render( + timestamp=${{ steps.filename.outputs.NIGHTLY_TIME }}, + branch="" if ${{ needs.default-values.outputs.release_tag == 'nightly' }} else current_nightly_beta, + branch_specific="" if os.getenv("GITHUB_REF") == "refs/heads/main" else f"?branch={current_nightly_beta}", + )) + - name: Update nightly release description (with date) if: always() run: | - gh release edit nightly --title "${{ steps.filename.outputs.NIGHTLY_NAME }}" --notes "Nightly release created on: ${{ steps.filename.outputs.NIGHTLY_TIME }}" + gh release edit ${{ needs.default-values.outputs.release_tag }} --title "${{ steps.filename.outputs.NIGHTLY_NAME }}" --notes-file release-notes.md env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release_notes.md.jinja b/.github/workflows/release_notes.md.jinja new file mode 100644 index 0000000000..e66eeca677 --- /dev/null +++ b/.github/workflows/release_notes.md.jinja @@ -0,0 +1,39 @@ +# Nightlies + +> :clock12: Created at: {{ timestamp }} + +| | | +|--------------:|--------------------------------------------------------------------------------------------| +| **Nightlies** | [![nightly {{ branch }}](https://github.com/Ultimaker/Cura/actions/workflows/installers.yml/badge.svg{{ branch_specific }} +?event=schedule)](https://github.com/Ultimaker/Cura/actions/workflows/installers.yml) | + +# Unit Test results + +| | | +|-------------------------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Cura {{ branch }}** | [![unit-test](https://github.com/Ultimaker/Cura/actions/workflows/unit-test.yml/badge.svg{{ branch_specific }})](https://github.com/Ultimaker/Cura/actions/workflows/unit-test.yml) | +| **CuraEngine {{ branch }}** | [![unit-test](https://github.com/Ultimaker/CuraEngine/actions/workflows/unit-test.yml/badge.svg{{ branch_specific }})](https://github.com/Ultimaker/CuraEngine/actions/workflows/unit-test.yml) | +| **Uranium {{ branch }}** | [![unit-test](https://github.com/Ultimaker/Uranium/actions/workflows/unit-test.yml/badge.svg{{ branch_specific }})](https://github.com/Ultimaker/Uranium/actions/workflows/unit-test.yml) | +| **CuraEngine GradualFlow 0.1** | [![unit-test](https://github.com/Ultimaker/CuraEngine_plugin_gradual_flow/actions/workflows/unit-test.yml/badge.svg?branch=0.1)](https://github.com/Ultimaker/CuraEngine_plugin_gradual_flow/actions/workflows/unit-test.yml) | +| **synsepalum-dulcificum 0.1** | [![unit-test](https://github.com/Ultimaker/synsepalum-dulcificum/actions/workflows/unit-test.yml/badge.svg?branch=0.1)](https://github.com/Ultimaker/synsepalum-dulcificum/actions/workflows/unit-test.yml) | +| **libSavitar** | [![unit-test](https://github.com/Ultimaker/libSavitar/actions/workflows/unit-test.yml/badge.svg)](https://github.com/Ultimaker/libSavitar/actions/workflows/unit-test.yml) | +| **libnest2d** | [![unit-test](https://github.com/Ultimaker/libnest2d/actions/workflows/unit-test.yml/badge.svg)](https://github.com/Ultimaker/libnest2d/actions/workflows/unit-test.yml) | + +# Conan packages + +| | | +|------------------------------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Cura {{ branch }}** | [![conan-package](https://github.com/Ultimaker/Cura/actions/workflows/conan-package.yml/badge.svg{{ branch_specific }})](https://github.com/Ultimaker/Cura/actions/workflows/conan-package.yml) | +| **CuraEngine {{ branch }}** | [![conan-package](https://github.com/Ultimaker/CuraEngine/actions/workflows/conan-package.yml/badge.svg{{ branch_specific }})](https://github.com/Ultimaker/CuraEngine/actions/workflows/conan-package.yml) | +| **Uranium {{ branch }}** | [![conan-package](https://github.com/Ultimaker/Uranium/actions/workflows/conan-package.yml/badge.svg{{ branch_specific }})](https://github.com/Ultimaker/Uranium/actions/workflows/conan-package.yml) | +| **fdm_materials {{ branch }}** | [![conan-package](https://github.com/Ultimaker/fdm_materials/actions/workflows/conan-package.yml/badge.svg{{ branch_specific }})](https://github.com/Ultimaker/fdm_materials/actions/workflows/conan-package.yml) | +| **cura-binary-data {{ branch }}** | [![conan-package](https://github.com/Ultimaker/cura-binary-data/actions/workflows/conan-package.yml/badge.svg{{ branch_specific }})](https://github.com/Ultimaker/cura-binary-data/actions/workflows/conan-package.yml) | +| **CuraEngine GradualFlow 0.1** | [![conan-package](https://github.com/Ultimaker/CuraEngine_plugin_gradual_flow/actions/workflows/conan-package.yml/badge.svg?branch=0.1)](https://github.com/Ultimaker/CuraEngine_plugin_gradual_flow/actions/workflows/conan-package.yml) | +| **synsepalum-dulcificum 0.1** | [![conan-package](https://github.com/Ultimaker/synsepalum-dulcificum/actions/workflows/conan-package.yml/badge.svg?branch=0.1)](https://github.com/Ultimaker/synsepalum-dulcificum/actions/workflows/conan-package.yml) | +| **CuraEngine gRPC definitions 0.1** | [![conan-package](https://github.com/Ultimaker/CuraEngine_grpc_definitions/actions/workflows/conan-package.yml/badge.svg?branch=0.1)](https://github.com/Ultimaker/CuraEngine_grpc_definitions/actions/workflows/conan-package.yml) | +| **libArcus** | [![conan-package](https://github.com/Ultimaker/libArcus/actions/workflows/conan-package.yml/badge.svg)](https://github.com/Ultimaker/libArcus/actions/workflows/conan-package.yml) | +| **pyArcus** | [![conan-package](https://github.com/Ultimaker/pyArcus/actions/workflows/conan-package.yml/badge.svg)](https://github.com/Ultimaker/pyArcus/actions/workflows/conan-package.yml) | +| **libSavitar** | [![conan-package](https://github.com/Ultimaker/libSavitar/actions/workflows/conan-package.yml/badge.svg)](https://github.com/Ultimaker/libSavitar/actions/workflows/conan-package.yml) | +| **pySavitar** | [![conan-package](https://github.com/Ultimaker/pySavitar/actions/workflows/conan-package.yml/badge.svg)](https://github.com/Ultimaker/pySavitar/actions/workflows/conan-package.yml) | +| **libnest2d** | [![conan-package](https://github.com/Ultimaker/libnest2d/actions/workflows/conan-package.yml/badge.svg)](https://github.com/Ultimaker/libnest2d/actions/workflows/conan-package.yml) | +| **pynest2d** | [![conan-package](https://github.com/Ultimaker/pynest2d/actions/workflows/conan-package.yml/badge.svg)](https://github.com/Ultimaker/pynest2d/actions/workflows/conan-package.yml) | \ No newline at end of file