name: Release on: workflow_dispatch: inputs: ref: description: 'Ref to build (for Pull Requests, use refs/pull/NNN/head)' required: true repository_dispatch: # client_payload should be the same as the inputs for workflow_dispatch. types: - Build* release: types: - published jobs: source: name: Source uses: ./.github/workflows/release-source.yml secrets: inherit docs: name: Docs needs: source uses: ./.github/workflows/release-docs.yml secrets: inherit with: version: ${{ needs.source.outputs.version }} linux: name: Linux (Generic) needs: source uses: ./.github/workflows/release-linux.yml secrets: inherit with: survey_key: ${{ needs.source.outputs.survey_key }} macos: name: MacOS needs: source uses: ./.github/workflows/release-macos.yml secrets: inherit with: survey_key: ${{ needs.source.outputs.survey_key }} windows: name: Windows needs: source uses: ./.github/workflows/release-windows.yml secrets: inherit with: is_tag: ${{ needs.source.outputs.is_tag }} survey_key: ${{ needs.source.outputs.survey_key }} windows-store: name: Windows Store needs: - source - windows if: needs.source.outputs.is_tag == 'true' uses: ./.github/workflows/release-windows-store.yml secrets: inherit with: version: ${{ needs.source.outputs.version }} upload: name: Upload needs: - source - docs - linux - macos - windows - windows-store # As windows-store is condition, we need to check ourselves if we need to run. # The always() makes sure the rest is always evaluated. if: always() && needs.source.result == 'success' && needs.docs.result == 'success' && needs.linux.result == 'success' && needs.macos.result == 'success' && needs.windows.result == 'success' && (needs.windows-store.result == 'success' || needs.windows-store.result == 'skipped') runs-on: ubuntu-latest # This job is empty, but ensures no upload job starts before all targets finished and are successful. steps: - name: Build completed run: | true upload-cdn: name: Upload (CDN) needs: - source - upload # As windows-store is condition, we need to check ourselves if we need to run. # The always() makes sure the rest is always evaluated. # Yes, you even need to do this if you yourself don't depend on the condition. if: always() && needs.source.result == 'success' && needs.upload.result == 'success' uses: ./.github/workflows/upload-cdn.yml secrets: inherit with: version: ${{ needs.source.outputs.version }} folder: ${{ needs.source.outputs.folder }} trigger_type: ${{ needs.source.outputs.trigger_type }} upload-steam: name: Upload (Steam) needs: - source - upload # As windows-store is condition, we need to check ourselves if we need to run. # The always() makes sure the rest is always evaluated. # Yes, you even need to do this if you yourself don't depend on the condition. # Additionally, only nightlies and releases go to Steam; not PRs. if: always() && needs.source.result == 'success' && needs.upload.result == 'success' && (needs.source.outputs.trigger_type == 'new-master' || needs.source.outputs.trigger_type == 'new-tag') uses: ./.github/workflows/upload-steam.yml secrets: inherit with: version: ${{ needs.source.outputs.version }} trigger_type: ${{ needs.source.outputs.trigger_type }} upload-gog: name: Upload (GOG) needs: - source - upload # As windows-store is condition, we need to check ourselves if we need to run. # The always() makes sure the rest is always evaluated. # Yes, you even need to do this if you yourself don't depend on the condition. # Additionally, only releases go to GOG; not nightlies or PRs. if: always() && needs.source.result == 'success' && needs.upload.result == 'success' && needs.source.outputs.trigger_type == 'new-tag' uses: ./.github/workflows/upload-gog.yml secrets: inherit with: version: ${{ needs.source.outputs.version }}