2023-07-11 07:10:03 +00:00
# Whenever a commit is pushed to master (ideally via a pull-request!)
# this action will create the next release, which means:
# 1. tag master with the proper version
# 2. create a new draft release (pre-released if a nightly build)
# 3. add release notes
name : 🏭 Create Release
on :
push :
branches :
- master
2024-01-11 00:04:42 +00:00
workflow_dispatch :
inputs :
is_prelease :
description : 'Should be a pre-release?'
required : true
default : 'true'
type : choice
options :
- 'true'
- 'false'
tag_value :
description : 'Create a new release from latest master with the given tag, if this is left blank it will bump the patch version. You dont need to include the "v" prefix'
required : false
2023-07-11 07:10:03 +00:00
permissions :
contents : write
jobs :
cut-release :
if : github.repository == 'PCSX2/pcsx2'
name : "Create Tag and Release"
2023-08-03 05:58:10 +00:00
runs-on : ubuntu-latest
outputs :
new_tag : ${{ steps.tag_version.outputs.new_tag }}
2023-07-11 07:10:03 +00:00
steps :
2023-09-11 04:33:40 +00:00
- uses : actions/checkout@v4
2023-07-11 07:10:03 +00:00
# Docs - https://github.com/mathieudutour/github-tag-action
- name : Bump Version and Push Tag
id : tag_version
uses : mathieudutour/github-tag-action@v6.1
with :
github_token : ${{ github.token }}
tag_prefix : v
default_bump : patch
2024-01-11 00:04:42 +00:00
# if set, it will overwrite the bump settings
custom_tag : ${{ github.event.inputs.tag_value == '' && null || github.event.inputs.tag_value }}
2023-07-11 07:10:03 +00:00
# TODO - we could do this and remove the node.js script, but auto-generated notes only work
# with PRs -- not commits (determine how much we care).
# - name: Create Draft Release
# run: |
# echo "Creating release with tag - ${{ steps.tag_version.outputs.new_tag }}"
# gh release create ${{ steps.tag_version.outputs.new_tag }} --draft --generate-notes -title ${{ steps.tag_version.outputs.new_tag }}
- name : Generate Release Notes
env :
OWNER : PCSX2
REPO : pcsx2
GITHUB_TOKEN : ${{ github.token }}
COMMIT_SHA : ${{ github.SHA }}
run : |
cd ./.github/workflows/scripts/releases/generate-release-notes
npm ci
node index.js
mv ./release-notes.md ${GITHUB_WORKSPACE}/release-notes.md
2024-01-11 00:04:42 +00:00
- name : Create a GitHub Release (Manual)
2023-07-11 07:10:03 +00:00
uses : softprops/action-gh-release@v1
2024-01-11 00:04:42 +00:00
if : steps.tag_version.outputs.new_tag && github.event_name == 'workflow_dispatch'
with :
body_path : ./release-notes.md
draft : true
prerelease : ${{ github.event_name != 'workflow_dispatch' || inputs.is_prelease == 'true' }}
tag_name : ${{ steps.tag_version.outputs.new_tag }}
- name : Create a GitHub Release (Push)
uses : softprops/action-gh-release@v1
if : steps.tag_version.outputs.new_tag && github.event_name != 'workflow_dispatch'
2023-07-11 07:10:03 +00:00
with :
body_path : ./release-notes.md
draft : true
prerelease : true
tag_name : ${{ steps.tag_version.outputs.new_tag }}
2023-07-20 01:44:20 +00:00
2023-07-11 07:10:03 +00:00
# Build Everything
# Linux
build_linux_qt :
if : github.repository == 'PCSX2/pcsx2'
needs :
- cut-release
name : "Linux"
uses : ./.github/workflows/linux_build_qt.yml
with :
jobName : "AppImage Build"
2024-01-06 20:44:44 +00:00
artifactPrefixName : "PCSX2-linux-Qt-x64-appimage"
2023-07-11 07:10:03 +00:00
compiler : clang
cmakeflags : ""
buildAppImage : true
2023-07-20 01:44:20 +00:00
fetchTags : true
2024-01-11 00:04:42 +00:00
stableBuild : ${{ github.event_name == 'workflow_dispatch' && inputs.is_prelease == 'false' }}
2023-07-11 07:10:03 +00:00
secrets : inherit
build_linux_flatpak :
if : github.repository == 'PCSX2/pcsx2'
needs :
- cut-release
name : "Linux"
uses : ./.github/workflows/linux_build_flatpak.yml
with :
jobName : "Flatpak Build"
2024-01-06 20:44:44 +00:00
artifactPrefixName : "PCSX2-linux-Qt-x64-flatpak"
2023-07-11 07:10:03 +00:00
compiler : clang
cmakeflags : ""
branch : "stable"
publish : false
2023-07-20 01:44:20 +00:00
fetchTags : true
2024-01-11 00:04:42 +00:00
stableBuild : ${{ github.event_name == 'workflow_dispatch' && inputs.is_prelease == 'false' }}
2023-07-11 07:10:03 +00:00
secrets : inherit
# Windows
build_windows_qt :
if : github.repository == 'PCSX2/pcsx2'
needs :
- cut-release
name : "Windows"
uses : ./.github/workflows/windows_build_qt.yml
with :
jobName : "Windows Build"
2024-01-06 20:44:44 +00:00
artifactPrefixName : "PCSX2-windows-Qt-x64"
2023-07-11 07:10:03 +00:00
configuration : CMake
buildSystem : cmake
cmakeFlags : -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
2023-07-20 01:44:20 +00:00
fetchTags : true
2024-01-11 00:04:42 +00:00
stableBuild : ${{ github.event_name == 'workflow_dispatch' && inputs.is_prelease == 'false' }}
2023-07-11 07:10:03 +00:00
secrets : inherit
# MacOS
build_macos_qt :
if : github.repository == 'PCSX2/pcsx2'
needs :
- cut-release
name : "MacOS"
uses : ./.github/workflows/macos_build.yml
with :
jobName : "MacOS Build"
2024-01-06 20:44:44 +00:00
artifactPrefixName : "PCSX2-macos-Qt"
2023-07-20 01:44:20 +00:00
fetchTags : true
2024-01-11 00:04:42 +00:00
stableBuild : ${{ github.event_name == 'workflow_dispatch' && inputs.is_prelease == 'false' }}
2023-07-11 07:10:03 +00:00
secrets : inherit
# Upload the Artifacts
upload_artifacts :
if : github.repository == 'PCSX2/pcsx2'
needs :
2023-08-03 05:58:10 +00:00
- cut-release
2023-07-11 07:10:03 +00:00
- build_linux_flatpak
- build_linux_qt
- build_windows_qt
- build_macos_qt
name : "Upload Artifacts"
runs-on : ubuntu-latest
steps :
2023-09-11 04:33:40 +00:00
- uses : actions/checkout@v4
2023-07-11 07:10:03 +00:00
- name : Prepare Artifact Folder
run : mkdir ./ci-artifacts/
2024-01-06 20:44:44 +00:00
- uses : actions/download-artifact@v4
2023-07-11 07:10:03 +00:00
name : Download all Artifacts
with :
path : ./ci-artifacts/
- name : Display structure of downloaded files
run : ls ./ci-artifacts/
# Prepare artifacts, they are all zips from github!
- name : Prepare Artifacts
working-directory : ./ci-artifacts/
run : for d in *windows*/; do 7z a "${d}asset.7z" ./$d/*; done
- name : Name and Upload the Release Assets
env :
GITHUB_TOKEN : ${{ github.token }}
SCAN_DIR : ${{ github.WORKSPACE }}/ci-artifacts
OUT_DIR : ${{ github.WORKSPACE }}/ci-artifacts/out
run : |
2023-08-03 05:58:10 +00:00
TAG_VAL=${{needs.cut-release.outputs.new_tag}}
2023-07-11 07:10:03 +00:00
echo "TAG_VAL=${TAG_VAL}"
gh release list --repo PCSX2/pcsx2
mkdir -p ${{ github.WORKSPACE }}/ci-artifacts/out
TAG_VAL=${TAG_VAL} python ./.github/workflows/scripts/releases/rename-release-assets.py
ls ${{ github.WORKSPACE }}/ci-artifacts/out
gh release upload "${TAG_VAL}" ${{ github.WORKSPACE }}/ci-artifacts/out/* --repo PCSX2/pcsx2 --clobber
- name : Publish Release
env :
GITHUB_TOKEN : ${{ github.token }}
run : |
2023-08-03 05:58:10 +00:00
TAG_VAL=${{needs.cut-release.outputs.new_tag}}
2023-07-11 07:10:03 +00:00
echo "TAG_VAL=${TAG_VAL}"
gh release edit ${TAG_VAL} --draft=false --repo PCSX2/pcsx2
2023-08-03 00:46:56 +00:00
2023-10-30 04:33:14 +00:00
- uses : actions/setup-node@v4
2023-08-03 00:46:56 +00:00
with :
node-version : 16
- name : Announce Release
env :
2023-08-03 05:58:10 +00:00
OWNER : PCSX2
REPO : pcsx2
2023-08-03 00:46:56 +00:00
DISCORD_BUILD_WEBHOOK : ${{ secrets.DISCORD_BUILD_WEBHOOK }}
2023-08-03 05:58:10 +00:00
GITHUB_TOKEN : ${{ github.token }}
2023-08-03 00:46:56 +00:00
run : |
2023-08-03 05:58:10 +00:00
TAG_VAL=${{needs.cut-release.outputs.new_tag}}
2023-08-03 00:46:56 +00:00
cd ./.github/workflows/scripts/releases/announce-release
npm ci
2023-08-03 05:58:10 +00:00
TAG_VAL=${TAG_VAL} node index.js