summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-x.ci/macos/notarize.sh6
-rwxr-xr-x.ci/update-github-release.sh67
-rw-r--r--.gitlab-ci.yml39
-rw-r--r--appveyor.yml3
4 files changed, 101 insertions, 14 deletions
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