Build & Deploy #164
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build & Deploy | |
| on: | |
| schedule: | |
| - cron: "0 0 * * 3,6" # Every Wednesday and Saturday at 00:00 | |
| workflow_dispatch: | |
| inputs: | |
| is_release_build: | |
| description: 'Is this a release build?' | |
| required: false | |
| default: 'false' | |
| env: | |
| artifact: 1 | |
| jobs: | |
| prepare_build: | |
| name: Prepare Build | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| ci_tag: ${{ steps.set_vars.outputs.ci_tag }} | |
| tag_created: ${{ steps.set_vars.outputs.tag_created }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set the tag and version | |
| id: tag_set | |
| run: | | |
| ci/actions/generate_next_git_tag.sh -c | |
| env: | |
| GITHUB_ACTOR: ${{ github.actor }} | |
| IS_RELEASE_BUILD: ${{ github.event.inputs.is_release_build || 'false' }} | |
| - name: Set output | |
| id: set_vars | |
| run: | | |
| echo "ci_tag=$CI_TAG" >> $GITHUB_OUTPUT | |
| echo "tag_created=$TAG_CREATED" >> $GITHUB_OUTPUT | |
| osx_job: | |
| name: macOS [${{ matrix.network }}] | |
| needs: prepare_build | |
| if: ${{ needs.prepare_build.outputs.tag_created == 'true' }} | |
| runs-on: macOS-14 | |
| timeout-minutes: 90 | |
| strategy: | |
| matrix: | |
| network: ["TEST", "BETA", "LIVE"] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| ref: ${{ needs.prepare_build.outputs.ci_tag }} | |
| repository: ${{ github.repository }} | |
| - name: Prepare | |
| run: ci/prepare/macos/prepare.sh | |
| - name: Build Artifact | |
| run: ci/build-deploy.sh "/tmp/qt/lib/cmake/Qt5"; | |
| env: | |
| NETWORK: ${{ matrix.network }} | |
| CI_TAG: ${{ needs.prepare_build.outputs.ci_tag }} | |
| - name: Deploy Artifact | |
| run: ci/actions/deploy.sh | |
| env: | |
| NETWORK: ${{ matrix.network }} | |
| TAG: ${{ needs.prepare_build.outputs.ci_tag }} | |
| S3_BUCKET_NAME: ${{ vars.S3_BUCKET_NAME }} | |
| S3_BUILD_DIRECTORY: ${{ vars.S3_BUILD_DIRECTORY }} | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_DEFAULT_REGION: us-east-2 | |
| linux_job: | |
| name: Linux [${{ matrix.network }}] | |
| needs: prepare_build | |
| if: ${{ needs.prepare_build.outputs.tag_created == 'true' }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 90 | |
| strategy: | |
| matrix: | |
| network: ["TEST", "BETA", "LIVE"] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| ref: ${{ needs.prepare_build.outputs.ci_tag }} | |
| repository: ${{ github.repository }} | |
| - name: Prepare | |
| run: sudo -E ci/prepare/linux/prepare.sh | |
| - name: Build Artifact | |
| run: ci/build-deploy.sh "/usr/lib/x86_64-linux-gnu/cmake/Qt5" | |
| env: | |
| NETWORK: ${{ matrix.network }} | |
| CI_TAG: ${{ needs.prepare_build.outputs.ci_tag }} | |
| - name: Deploy Artifact | |
| run: ci/actions/deploy.sh | |
| env: | |
| NETWORK: ${{ matrix.network }} | |
| TAG: ${{ needs.prepare_build.outputs.ci_tag }} | |
| S3_BUCKET_NAME: ${{ vars.S3_BUCKET_NAME }} | |
| S3_BUILD_DIRECTORY: ${{ vars.S3_BUILD_DIRECTORY }} | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_DEFAULT_REGION: us-east-2 | |
| linux_docker_job: | |
| name: Docker [${{ matrix.network }}] | |
| needs: prepare_build | |
| if: ${{ needs.prepare_build.outputs.tag_created == 'true' }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 90 | |
| strategy: | |
| matrix: | |
| network: ["TEST", "BETA", "LIVE"] | |
| env: | |
| CI_TAG: ${{ needs.prepare_build.outputs.ci_tag }} | |
| DOCKER_REGISTRY: ${{ vars.DOCKER_REGISTRY }} | |
| DOCKER_USER: ${{ vars.DOCKER_USER }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| IS_RELEASE_BUILD: ${{ github.event.inputs.is_release_build || 'false' }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| ref: ${{ needs.prepare_build.outputs.ci_tag }} | |
| repository: ${{ github.repository }} | |
| - name: Free Disk Space | |
| uses: ./.github/actions/free-disk-space | |
| - name: Build Docker | |
| run: ci/actions/linux/docker-build.sh | |
| env: | |
| NETWORK: ${{ matrix.network }} | |
| - name: Deploy Docker (Docker Hub) | |
| if: env.DOCKER_PASSWORD != '' | |
| run: ci/actions/linux/docker-deploy.sh | |
| env: | |
| NETWORK: ${{ matrix.network }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Deploy Docker (ghcr.io) | |
| run: ci/actions/linux/ghcr-deploy.sh | |
| env: | |
| NETWORK: ${{ matrix.network }} | |
| DOCKER_REGISTRY: ghcr.io | |
| DOCKER_USER: ${{ github.repository_owner }} | |
| DOCKER_PASSWORD: ${{ secrets.GITHUB_TOKEN }} | |
| windows_job: | |
| name: Windows [${{ matrix.network }}] | |
| needs: prepare_build | |
| if: ${{ needs.prepare_build.outputs.tag_created == 'true' }} | |
| runs-on: windows-latest | |
| timeout-minutes: 90 | |
| strategy: | |
| matrix: | |
| network: ["TEST", "BETA", "LIVE"] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: "recursive" | |
| ref: ${{ needs.prepare_build.outputs.ci_tag }} | |
| repository: ${{ github.repository }} | |
| - name: Prepare | |
| run: ci/prepare/windows/prepare.ps1 | |
| - name: Build Artifact | |
| run: ci/actions/windows/build.ps1 | |
| env: | |
| CSC_LINK: ${{ secrets.CSC_LINK }} | |
| CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} | |
| - name: Deploy Artifact | |
| run: ci/actions/windows/deploy.ps1 | |
| env: | |
| NETWORK: ${{ matrix.network }} | |
| TAG: ${{ needs.prepare_build.outputs.ci_tag }} | |
| S3_BUCKET_NAME: ${{ vars.S3_BUCKET_NAME }} | |
| S3_BUILD_DIRECTORY: ${{ vars.S3_BUILD_DIRECTORY }} | |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_DEFAULT_REGION: us-east-2 |