diff --git a/.ci/macos/notarize.sh b/.ci/macos/notarize.sh index 2757d44c..345f4828 100755 --- a/.ci/macos/notarize.sh +++ b/.ci/macos/notarize.sh @@ -97,7 +97,7 @@ done VERSION=${CI_COMMIT_SHORT_SHA} if [ -n "$VERSION" ]; then - mv nheko.dmg "nheko-${VERSION}_${PLAT}.dmg" - mkdir artifacts - cp "nheko-${VERSION}_${PLAT}.dmg" artifacts/ + mv nheko.dmg "nheko-${VERSION}-${PLAT}.dmg" + mkdir -p artifacts + cp "nheko-${VERSION}-${PLAT}.dmg" artifacts/ fi \ No newline at end of file diff --git a/.ci/update-github-release.sh b/.ci/update-github-release.sh new file mode 100755 index 00000000..234c1f41 --- /dev/null +++ b/.ci/update-github-release.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +if [ -z "$CI_COMMIT_TAG" ]; then + echo "CI_COMMIT_TAG is unset or empty; exiting" + exit 1 +fi + +echo "Checking if release exists for ${CI_COMMIT_TAG}" +# check if we already have a release for the current tag or not +http_code=$(curl \ + -s \ + -o /dev/null \ + -I \ + -w "%{http_code}" \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${GITHUB_AUTH_TOKEN}"\ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "https://api.github.com/repos/Nheko-Reborn/nheko/releases/tags/$CI_COMMIT_TAG") + +if [ "$http_code" = "404" ]; then + echo "Release does not exist... getting notes from CHANGELOG.md:" + release_notes="$(perl -0777 -ne '/.*?(## .*?)\n(## |\Z)/s && print $1' CHANGELOG.md | jq -R -s '.')" + echo "$release_notes" + + echo "Creating new release for ${CI_COMMIT_TAG}" + # Doing a 'fresh' release, not just updating the assets. + release_json="$(curl \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${GITHUB_AUTH_TOKEN}"\ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/Nheko-Reborn/nheko/releases \ + -d "{\"tag_name\":\"${CI_COMMIT_TAG}\",\"target_commitish\":\"master\",\"name\":\"${CI_COMMIT_TAG}\",\"body\":${release_notes},\"draft\":true,\"prerelease\":true,\"generate_release_notes\":false}")" +elif [ "$http_code" = "200" ]; then + echo "Release already exists for ${CI_COMMIT_TAG}; Updating" + # Updating a release (probably because of cirrus-ci or so) + release_json=$(curl \ + -s \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${GITHUB_AUTH_TOKEN}"\ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "https://api.github.com/repos/Nheko-Reborn/nheko/releases/tags/$CI_COMMIT_TAG") +fi + +echo "Getting upload URL..." +upload_url="$(echo "$release_json" | jq -r '."upload_url"')" +# get rid of the 'hypermedia' stuff at the end and use a 'real' URL +echo "Upload URL (hypermedia): ${upload_url}" +upload_url="$(echo "$upload_url" | sed 's/{?name,label\}/?name/g')" + +ls -la . +echo "Uploading artifacts" +for file in ./artifacts/*; do + name="${file##*/}" + echo "Uploading $file" + [ -e "$file" ] && curl \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${GITHUB_AUTH_TOKEN}"\ + -H "X-GitHub-Api-Version: 2022-11-28" \ + -H "Content-Type: application/octet-stream" \ + "${upload_url}=$name" \ + --data-binary "@$file" +done + + +# TODO: AppVeyor stuffs? \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 58524d03..c386b4c1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,8 @@ +stages: + - build + - sign + - deploy + variables: CCACHE_COMPILERCHECK: content CCACHE_DIR: "${CI_PROJECT_DIR}/.ccache" @@ -125,7 +130,7 @@ build-macos: - if : '$CI_PIPELINE_TRIGGERED == null' artifacts: paths: - - build/nheko.app + - build/nheko.app # not putting this in 'artifacts' subdir because we don't want to put it on releases name: nheko-${CI_COMMIT_SHORT_SHA}-macos-app expose_as: 'macos-app' public: false @@ -136,7 +141,7 @@ build-macos: - "${CCACHE_DIR}" codesign-macos: - stage: deploy + stage: sign tags: [macos] variables: PLAT: "intel" @@ -146,19 +151,19 @@ codesign-macos: - export PATH=/usr/local/opt/qt@5/bin/:${PATH} - ./.ci/macos/notarize.sh after_script: - - ./.ci/upload-nightly-gitlab.sh artifacts/nheko-${CI_COMMIT_SHORT_SHA}_${PLAT}.dmg + - ./.ci/upload-nightly-gitlab.sh artifacts/nheko-${CI_COMMIT_SHORT_SHA}-${PLAT}.dmg needs: - job: build-macos optional: true # optional since we want to be able to also trigger this job from cirrus ci for apple silicon builds. rules: - if : '$CI_PIPELINE_TRIGGERED && $CI_COMMIT_REF_PROTECTED == "true"' variables: - PLAT: "m1" + PLAT: "apple_silicon" - if : '$CI_COMMIT_BRANCH == "master"' - if : $CI_COMMIT_TAG artifacts: paths: - - artifacts/nheko-${CI_COMMIT_SHORT_SHA}_${PLAT}.dmg + - artifacts/nheko-${CI_COMMIT_SHORT_SHA}-${PLAT}.dmg - /tmp/notarize* name: nheko-${CI_COMMIT_SHORT_SHA}-macos @@ -181,6 +186,7 @@ build-flatpak-amd64: after_script: - bash ./.ci/upload-nightly-gitlab.sh build-flatpak/nheko-amd64.flatpak - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true + - (cd .. && mkdir -p artifacts && cp build-flatpak/nheko-amd64.flatpak artifacts/) || true rules: - if : '$CI_PIPELINE_TRIGGERED == null' cache: @@ -189,7 +195,7 @@ build-flatpak-amd64: - build-flatpak/.flatpak-builder/ artifacts: expose_as: 'flatpak-amd64' - paths: ['build-flatpak/nheko-amd64.flatpak'] + paths: ['artifacts/nheko-amd64.flatpak'] name: flatpak-${CI_COMMIT_REF_NAME}-${VERSION}-amd64 build-flatpak-arm64: @@ -212,6 +218,7 @@ build-flatpak-arm64: after_script: - bash ./.ci/upload-nightly-gitlab.sh build-flatpak/nheko-arm64.flatpak - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true + - (cd .. && mkdir -p artifacts && cp build-flatpak/nheko-arm64.flatpak artifacts/) || true rules: - if : '$CI_PIPELINE_TRIGGERED == null' cache: @@ -220,7 +227,7 @@ build-flatpak-arm64: - build-flatpak/.flatpak-builder/ artifacts: expose_as: 'flatpak-arm64' - paths: ['build-flatpak/nheko-arm64.flatpak'] + paths: ['artifacts/nheko-arm64.flatpak'] name: flatpak-${CI_COMMIT_REF_NAME}-${VERSION}-arm64 appimage-amd64: @@ -274,12 +281,13 @@ appimage-amd64: - mkdir -p AppDir/usr/lib/x86_64-linux-gnu AppDir/lib/x86_64-linux-gnu - appimage-builder --skip-test after_script: + - mkdir -p artifacts && cp nheko-latest-x86_64.AppImage artifacts/ - bash ./.ci/upload-nightly-gitlab.sh nheko-latest-x86_64.AppImage rules: - if : '$CI_PIPELINE_TRIGGERED == null' artifacts: paths: - - 'nheko-latest-x86_64.AppImage' + - 'artifacts/nheko-latest-x86_64.AppImage' expire_in: 1 week expose_as: 'appimage-amd64' cache: @@ -303,3 +311,18 @@ linting: rules: - if : '$CI_PIPELINE_TRIGGERED == null' +github-release: + stage: deploy + image: alpine:latest + tags: [docker] + rules: + - if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/' + dependencies: + - appimage-amd64 + - build-flatpak-arm64 + - build-flatpak-amd64 + - codesign-macos + before_script: + - apk update && apk add jq curl perl + script: + - ./.ci/update-github-release.sh diff --git a/appveyor.yml b/appveyor.yml index e3921f45..4a0b1eec 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -109,9 +109,6 @@ after_build: - copy nheko-installer.exe nheko-%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%-installer.exe - ps: .\.ci\upload-nightly.ps1 -on_success: - - if "%APPVEYOR_REPO_TAG%" == "true" (curl -T nheko-%APPVEYOR_REPO_TAG_NAME%-installer.exe -uredsky17:%BINTRAY_APIKEY% https://api.bintray.com/content/nheko-reborn/nheko/%APPVEYOR_REPO_TAG_NAME%/nheko/%APPVEYOR_REPO_TAG_NAME%/) - deploy: - description: "Development builds" provider: GitHub