123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- name: All installers
- run-name: ${{ inputs.cura_conan_version }} by @${{ github.actor }}
- on:
- workflow_dispatch:
- inputs:
- cura_conan_version:
- description: 'Cura Conan Version'
- default: 'cura/latest@ultimaker/testing'
- required: true
- type: string
- conan_args:
- description: 'Conan args: eq.: --require-override'
- default: ''
- required: false
- type: string
- enterprise:
- description: 'Build Cura as an Enterprise edition'
- default: false
- required: true
- type: boolean
- staging:
- description: 'Use staging API'
- default: false
- required: true
- type: boolean
- nightly:
- description: 'Upload to nightly release'
- default: false
- required: true
- type: boolean
- schedule:
- # Daily at 4:15 CET (main-branch) and 5:15 CET (release-branch)
- - cron: '15 3 * * *'
- - cron: '15 4 * * *'
- env:
- CONAN_ARGS: ${{ inputs.conan_args || '' }}
- ENTERPRISE: ${{ inputs.enterprise || false }}
- STAGING: ${{ inputs.staging || false }}
- LATEST_RELEASE: '5.6'
- LATEST_RELEASE_SCHEDULE_HOUR: 4
- jobs:
- default_values:
- runs-on: ubuntu-latest
- outputs:
- cura_conan_version: ${{ steps.default.outputs.cura_conan_version }}
- release_tag: ${{ steps.default.outputs.release_tag }}
- steps:
- - name: Output default values
- id: default
- shell: python
- run: |
- import os
- import datetime
-
- if "${{ github.event_name }}" != "schedule":
- cura_conan_version = "${{ github.event.inputs.cura_conan_version }}"
- else:
- now = datetime.datetime.now()
- cura_conan_version = "cura/latest@ultimaker/stable" if now.hour == int(os.environ['LATEST_RELEASE_SCHEDULE_HOUR']) else "cura/latest@ultimaker/testing"
-
- release_tag = f"nightly-{os.environ['LATEST_RELEASE']}" if "/stable" in cura_conan_version else "nightly"
- # Set cura_conan_version environment variable
- output_env = os.environ["GITHUB_OUTPUT"]
- content = ""
- if os.path.exists(output_env):
- with open(output_env, "r") as f:
- content = f.read()
- 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")
- summary_env = os.environ["GITHUB_STEP_SUMMARY"]
- content = ""
- if os.path.exists(summary_env):
- with open(summary_env, "r") as f:
- content = f.read()
-
- with open(summary_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
- needs: [ default_values ]
- with:
- cura_conan_version: ${{ needs.default_values.outputs.cura_conan_version }}
- conan_args: ${{ github.event.inputs.conan_args }}
- enterprise: ${{ github.event.inputs.enterprise == 'true' }}
- staging: ${{ github.event.inputs.staging == 'true' }}
- architecture: X64
- operating_system: windows-2022
- secrets: inherit
- linux-installer:
- uses: ./.github/workflows/linux.yml
- needs: [ default_values ]
- with:
- cura_conan_version: ${{ needs.default_values.outputs.cura_conan_version }}
- conan_args: ${{ github.event.inputs.conan_args }}
- enterprise: ${{ github.event.inputs.enterprise == 'true' }}
- staging: ${{ github.event.inputs.staging == 'true' }}
- architecture: X64
- operating_system: ubuntu-22.04
- secrets: inherit
- macos-installer:
- uses: ./.github/workflows/macos.yml
- needs: [ default_values ]
- with:
- cura_conan_version: ${{ needs.default_values.outputs.cura_conan_version }}
- conan_args: ${{ github.event.inputs.conan_args }}
- enterprise: ${{ github.event.inputs.enterprise == 'true' }}
- staging: ${{ github.event.inputs.staging == 'true' }}
- architecture: X64
- operating_system: self-hosted-X64
- secrets: inherit
- macos-arm-installer:
- uses: ./.github/workflows/macos.yml
- needs: [ default_values ]
- with:
- cura_conan_version: ${{ needs.default_values.outputs.cura_conan_version }}
- conan_args: ${{ github.event.inputs.conan_args }}
- enterprise: ${{ github.event.inputs.enterprise == 'true' }}
- staging: ${{ github.event.inputs.staging == 'true' }}
- architecture: ARM64
- operating_system: self-hosted-ARM64
- secrets: inherit
- # Run and update nightly release when the nightly input is set to true or if the schedule is triggered
- update-nightly-release:
- if: ${{ inputs.nightly || github.event_name == 'schedule' }}
- runs-on: ubuntu-latest
- needs: [ default_values, windows-installer, linux-installer, macos-installer, macos-arm-installer ]
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- # It's not necessary to download all three, but it does make sure we have at least one if an OS is skipped.
- - name: Download the run info
- uses: actions/download-artifact@v2
- with:
- name: linux-run-info
- - name: Set the run info as environment variables
- run: |
- . run_info.sh
- - name: Output the name file name and extension
- id: filename
- shell: python
- run: |
- import os
- import datetime
- enterprise = "-Enterprise" if "${{ github.event.inputs.enterprise }}" == "true" else ""
- linux = f"UltiMaker-Cura-{os.getenv('CURA_VERSION_FULL')}{enterprise}-linux-X64"
- mac_x64_dmg = f"UltiMaker-Cura-{os.getenv('CURA_VERSION_FULL')}{enterprise}-macos-X64"
- mac_x64_pkg = f"UltiMaker-Cura-{os.getenv('CURA_VERSION_FULL')}{enterprise}-macos-X64"
- mac_arm_dmg = f"UltiMaker-Cura-{os.getenv('CURA_VERSION_FULL')}{enterprise}-macos-ARM64"
- mac_arm_pkg = f"UltiMaker-Cura-{os.getenv('CURA_VERSION_FULL')}{enterprise}-macos-ARM64"
- win_msi = installer_filename = f"UltiMaker-Cura-{os.getenv('CURA_VERSION_FULL')}{enterprise}-win64-X64"
- win_exe = installer_filename = f"UltiMaker-Cura-{os.getenv('CURA_VERSION_FULL')}{enterprise}-win64-X64"
- nightly_name = "UltiMaker-Cura-" + os.getenv('CURA_VERSION_FULL').split("+")[0]
- nightly_creation_time = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
- output_env = os.environ["GITHUB_OUTPUT"]
- content = ""
- if os.path.exists(output_env):
- with open(output_env, "r") as f:
- content = f.read()
- with open(output_env, "w") as f:
- f.write(content)
- f.writelines(f"LINUX={linux}\n")
- f.writelines(f"MAC_X64_DMG={mac_x64_dmg}\n")
- f.writelines(f"MAC_X64_PKG={mac_x64_pkg}\n")
- f.writelines(f"MAC_ARM_DMG={mac_arm_dmg}\n")
- f.writelines(f"MAC_ARM_PKG={mac_arm_pkg}\n")
- f.writelines(f"WIN_MSI={win_msi}\n")
- f.writelines(f"WIN_EXE={win_exe}\n")
- f.writelines(f"NIGHTLY_NAME={nightly_name}\n")
- f.writelines(f"NIGHTLY_TIME={nightly_creation_time}\n")
- - name: Download linux installer jobs artifacts
- uses: actions/download-artifact@v2
- with:
- name: ${{ steps.filename.outputs.LINUX }}-AppImage
- path: installers
-
- - name: Download linux installer jobs asc artifacts
- uses: actions/download-artifact@v2
- with:
- name: ${{ steps.filename.outputs.LINUX }}-asc
- path: installers
- - name: Rename Linux installer to nightlies
- run: |
- mv installers/${{ steps.filename.outputs.LINUX }}.AppImage installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-linux-X64.AppImage
- mv installers/${{ steps.filename.outputs.LINUX }}.AppImage.asc installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-linux-X64.AppImage.asc
- - name: Update nightly release for Linux
- run: |
- 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 }}
- - name: Download win msi installer jobs artifacts
- uses: actions/download-artifact@v2
- with:
- name: ${{ steps.filename.outputs.WIN_MSI }}-msi
- path: installers
- - name: Download win exe installer jobs artifacts
- uses: actions/download-artifact@v2
- with:
- name: ${{ steps.filename.outputs.WIN_EXE }}-exe
- path: installers
- - name: Rename Windows installers to nightlies
- run: |
- mv installers/${{ steps.filename.outputs.WIN_MSI }}.msi installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-win64-X64.msi
- mv installers/${{ steps.filename.outputs.WIN_EXE }}.exe installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-win64-X64.exe
- - name: Update nightly release for Windows
- run: |
- 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 }}
- - name: Download MacOS (X64) dmg installer jobs artifacts
- uses: actions/download-artifact@v2
- with:
- name: ${{ steps.filename.outputs.MAC_X64_DMG }}-dmg
- path: installers
- - name: Download MacOS (X64) pkg installer jobs artifacts
- uses: actions/download-artifact@v2
- with:
- name: ${{ steps.filename.outputs.MAC_X64_PKG }}-pkg
- path: installers
- - name: Rename MacOS (X64) installers to nightlies
- run: |
- mv installers/${{ steps.filename.outputs.MAC_X64_DMG }}.dmg installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-X64.dmg
- mv installers/${{ steps.filename.outputs.MAC_X64_PKG }}.pkg installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-X64.pkg
- - name: Update nightly release for MacOS (X64)
- run: |
- 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 }}
- - name: Download MacOS (ARM-64) dmg installer jobs artifacts
- uses: actions/download-artifact@v2
- with:
- name: ${{ steps.filename.outputs.MAC_ARM_DMG }}-dmg
- path: installers
- - name: Download MacOS (ARM-64) pkg installer jobs artifacts
- uses: actions/download-artifact@v2
- with:
- name: ${{ steps.filename.outputs.MAC_ARM_PKG }}-pkg
- path: installers
- - name: Rename MacOS (ARM-64) installers to nightlies
- run: |
- mv installers/${{ steps.filename.outputs.MAC_ARM_DMG }}.dmg installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-ARM64.dmg
- mv installers/${{ steps.filename.outputs.MAC_ARM_PKG }}.pkg installers/${{ steps.filename.outputs.NIGHTLY_NAME }}-macos-ARM64.pkg
- - name: Update nightly release for MacOS (ARM-64)
- run: |
- 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
- shell: python
- 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 ${{ needs.default_values.outputs.release_tag }} --title "${{ steps.filename.outputs.NIGHTLY_NAME }}" --notes-file release-notes.md
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|