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
|