mirror of
https://github.com/jwinterm/grim.git
synced 2026-10-23 16:28:31 +02:00
ci: cache, local maven for android build and artifacts, fix telegram upload
Reviewed-on: https://code.gri.mw/GUI/grim/pulls/37
This commit is contained in:
@@ -6,6 +6,7 @@ on:
|
||||
- "*"
|
||||
branches-ignore:
|
||||
- master
|
||||
- ci
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -21,12 +22,22 @@ jobs:
|
||||
sha=$(git rev-parse HEAD)
|
||||
[[ "${{ github.sha }}" == "${sha}" ]] && test=false || test=true
|
||||
echo "test=${test}" >> "$FORGEJO_OUTPUT"
|
||||
- uses: actions/cache@v5
|
||||
if: ${{ steps.check.outputs.test == 'true' }}
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||
- name: Build
|
||||
if: ${{ steps.check.outputs.test == 'true' }}
|
||||
run: cargo build --release
|
||||
- name: Telegram Notify Channel
|
||||
if: ${{ steps.check.outputs.test == 'true' && (success() || failure()) }}
|
||||
uses: actions/telegram-notifier@ardocrat
|
||||
uses: actions/telegram-notifier@main
|
||||
with:
|
||||
api_url: ${{ secrets.TELEGRAM_API_URL }}
|
||||
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
@@ -35,7 +46,7 @@ jobs:
|
||||
notify_fields: "actor,repository,workflow,branch,commit"
|
||||
- name: Telegram Notify Group
|
||||
if: ${{ steps.check.outputs.test == 'true' && (success() || failure()) }}
|
||||
uses: actions/telegram-notifier@ardocrat
|
||||
uses: actions/telegram-notifier@main
|
||||
with:
|
||||
api_url: ${{ secrets.TELEGRAM_API_URL }}
|
||||
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
|
||||
@@ -13,6 +13,17 @@ jobs:
|
||||
with:
|
||||
submodules: recursive
|
||||
- run: mkdir release
|
||||
- name: Restore cargo cache
|
||||
id: cache-cargo-restore
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||
- name: Release Linux x86
|
||||
run: cargo zigbuild --release --target x86_64-unknown-linux-gnu
|
||||
- name: AppImage x86
|
||||
@@ -25,6 +36,16 @@ jobs:
|
||||
run: sha256sum grim-${{ inputs.version }}-linux-x86_64.AppImage > grim-${{ inputs.version }}-linux-x86_64-appimage-sha256sum.txt
|
||||
- name: Release Linux ARM
|
||||
run: cargo zigbuild --release --target aarch64-unknown-linux-gnu
|
||||
- name: Save cargo cache
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
key: ${{ steps.cache-cargo-restore.outputs.cache-primary-key }}
|
||||
- name: AppImage ARM
|
||||
run: |
|
||||
cp target/aarch64-unknown-linux-gnu/release/grim linux/Grim.AppDir/AppRun
|
||||
@@ -33,7 +54,7 @@ jobs:
|
||||
- name: Checksum AppImage ARM
|
||||
working-directory: release
|
||||
run: sha256sum grim-${{ inputs.version }}-linux-arm.AppImage > grim-${{ inputs.version }}-linux-arm-appimage-sha256sum.txt
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: release_linux
|
||||
path: release/*
|
||||
- name: Upload artifacts
|
||||
run: |
|
||||
tar -czf linux.tar.gz release
|
||||
curl -v -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} --upload-file linux.tar.gz ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/linux.tar.gz
|
||||
@@ -13,10 +13,31 @@ jobs:
|
||||
with:
|
||||
submodules: recursive
|
||||
- run: mkdir release
|
||||
- name: Restore cargo cache
|
||||
id: cache-cargo-restore
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||
- name: Release MacOS Universal
|
||||
run: |
|
||||
cargo zigbuild --release --target universal2-apple-darwin
|
||||
mv target/universal2-apple-darwin/release/grim macos/Grim.app/Contents/MacOS
|
||||
cp target/universal2-apple-darwin/release/grim macos/Grim.app/Contents/MacOS
|
||||
- name: Save cargo cache
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
key: ${{ steps.cache-cargo-restore.outputs.cache-primary-key }}
|
||||
- name: Archive Universal
|
||||
working-directory: macos
|
||||
run: |
|
||||
@@ -25,7 +46,7 @@ jobs:
|
||||
- name: Checksum Release Universal
|
||||
working-directory: release
|
||||
run: sha256sum grim-${{ inputs.version }}-macos.zip > grim-${{ inputs.version }}-macos-sha256sum.txt
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: release_macos
|
||||
path: release/*
|
||||
- name: Upload artifacts
|
||||
run: |
|
||||
tar -czf macos.tar.gz release
|
||||
curl -v -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} --upload-file macos.tar.gz ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/macos.tar.gz
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Telegram Notify Channel
|
||||
uses: actions/telegram-notifier@ardocrat
|
||||
uses: actions/telegram-notifier@main
|
||||
with:
|
||||
api_url: ${{ secrets.TELEGRAM_API_URL }}
|
||||
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
status: ${{ job.status }}
|
||||
notify_fields: "actor,repository"
|
||||
- name: Telegram Notify Group
|
||||
uses: actions/telegram-notifier@ardocrat
|
||||
uses: actions/telegram-notifier@main
|
||||
with:
|
||||
api_url: ${{ secrets.TELEGRAM_API_URL }}
|
||||
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
name: Release build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- ci
|
||||
tags-ignore:
|
||||
- "*-dev*"
|
||||
|
||||
@@ -35,6 +38,13 @@ jobs:
|
||||
echo "exists=${exists}" >> "$FORGEJO_OUTPUT"
|
||||
echo ${exists}
|
||||
mkdir release
|
||||
- name: Check previous release
|
||||
id: check_prev
|
||||
run: |
|
||||
git fetch --tags
|
||||
[[ ${{ steps.check.outputs.exists == 'true' || forgejo.ref_type == 'branch' }} ]] && skip=1 || skip=0
|
||||
last_tag=$(git describe --abbrev=0 --tags $(git rev-list --tags --skip=${skip} --max-count=1))
|
||||
echo "last_tag=${last_tag}" >> "$FORGEJO_OUTPUT"
|
||||
- uses: ardocrat/forgejo-release@grim
|
||||
if: ${{ forgejo.ref_type == 'tag' && steps.check.outputs.exists == 'true' }}
|
||||
with:
|
||||
@@ -55,7 +65,12 @@ jobs:
|
||||
override: false
|
||||
prerelease: false
|
||||
release-dir: ./release
|
||||
release-notes: ""
|
||||
release-notes: "Full Changelog: [${{ steps.check_prev.outputs.last_tag }}...${{ steps.version.outputs.v }}](https://code.gri.mw/${{ forgejo.repository }}/compare/${{ steps.check_prev.outputs.last_tag }}...${{ steps.version.outputs.v }})"
|
||||
- name: Delete dev release
|
||||
if: ${{ forgejo.ref_type == 'tag' && steps.check.outputs.exists == 'true' }}
|
||||
uses: actions/delete-release@v1
|
||||
with:
|
||||
release_name: "${{ forgejo.ref_name }}-dev"
|
||||
|
||||
android_libs:
|
||||
if: ${{ forgejo.ref_type == 'branch' || needs.check.outputs.exists == 'false' }}
|
||||
@@ -65,13 +80,23 @@ jobs:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||
- name: Build libs
|
||||
run: |
|
||||
chmod +x scripts/android.sh && ./scripts/android.sh lib ${{ needs.version.outputs.v }}
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: libs_android
|
||||
path: android/app/src/main/jniLibs/*
|
||||
- name: Upload artifacts
|
||||
run: |
|
||||
cd android/app/src/main
|
||||
tar -czf jniLibs.tar.gz jniLibs
|
||||
curl -v -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} --upload-file jniLibs.tar.gz ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/jniLibs.tar.gz
|
||||
|
||||
android_release:
|
||||
if: ${{ forgejo.ref_type == 'branch' || needs.check.outputs.exists == 'false' }}
|
||||
@@ -81,33 +106,38 @@ jobs:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- run: mkdir libs
|
||||
- name: Download Libs Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: libs
|
||||
pattern: libs_*
|
||||
merge-multiple: true
|
||||
- name: Setup Java build
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
- name: Download artifacts
|
||||
run: |
|
||||
cd android/app/src/main
|
||||
curl -o jniLibs.tar.gz -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/jniLibs.tar.gz
|
||||
tar -xzf jniLibs.tar.gz
|
||||
rm jniLibs.tar.gz
|
||||
- name: Setup build
|
||||
run: |
|
||||
chmod +x android/gradlew
|
||||
echo "${{ secrets.ANDROID_KEYSTORE }}" > release.keystore.txt
|
||||
base64 -d release.keystore.txt > android/keystore
|
||||
echo "${{ secrets.ANDROID_KEYSTORE_PROPS }}" > release.keystore.props.txt
|
||||
base64 -d release.keystore.props.txt > android/keystore.properties
|
||||
- name: Prepare build
|
||||
run: |
|
||||
mkdir release
|
||||
chmod +x android/gradlew
|
||||
mkdir ~/.gradle && touch ~/.gradle/gradle.properties
|
||||
printf "mavenHost=${{ secrets.MAVEN_HOST }}\n" >> ~/.gradle/gradle.properties
|
||||
printf "mavenUser=${{ secrets.MAVEN_USER }}\n" >> ~/.gradle/gradle.properties
|
||||
printf "mavenPassword=${{ secrets.MAVEN_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
- name: Release ARMv7+v8 APK
|
||||
working-directory: android
|
||||
run: |
|
||||
jni_path=app/src/main/jniLibs
|
||||
mkdir ${jni_path}
|
||||
mv ../libs/armeabi-v7a ${jni_path}
|
||||
mv ../libs/arm64-v8a ${jni_path}
|
||||
./gradlew assembleSignedRelease
|
||||
apk_path=app/build/outputs/apk/signedRelease/app-signedRelease.apk
|
||||
mv ${jni_path}/x86_64 x86_64
|
||||
./gradlew assembleCiSignedRelease
|
||||
apk_path=app/build/outputs/apk/ci/signedRelease/app-ci-signedRelease.apk
|
||||
name=grim-${{ needs.version.outputs.v }}-android.apk
|
||||
mv ${apk_path} "${name}"
|
||||
- name: Checksum ARM APK
|
||||
@@ -122,9 +152,9 @@ jobs:
|
||||
./gradlew clean
|
||||
jni_path=app/src/main/jniLibs
|
||||
rm -rf ${jni_path}/*
|
||||
mv ../libs/x86_64 ${jni_path}
|
||||
./gradlew assembleSignedRelease
|
||||
apk_path=app/build/outputs/apk/signedRelease/app-signedRelease.apk
|
||||
mv x86_64 ${jni_path}
|
||||
./gradlew assembleCiSignedRelease
|
||||
apk_path=app/build/outputs/apk/ci/signedRelease/app-ci-signedRelease.apk
|
||||
name=grim-${{ needs.version.outputs.v }}-android-x86_64.apk
|
||||
mv ${apk_path} "${name}"
|
||||
- name: Checksum x86_64 APK
|
||||
@@ -133,11 +163,12 @@ jobs:
|
||||
name=grim-${{ needs.version.outputs.v }}-android.apk
|
||||
checksum=grim-${{ needs.version.outputs.v }}-android-x86_64-sha256sum.txt
|
||||
sha256sum "${name}" > "${checksum}"
|
||||
- run: mv android/grim* release
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: release_android
|
||||
path: release/*
|
||||
- name: Upload artifacts
|
||||
run: |
|
||||
mkdir release
|
||||
mv android/grim* release
|
||||
tar -czf android.tar.gz release
|
||||
curl -v -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} --upload-file android.tar.gz ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/android.tar.gz
|
||||
|
||||
linux:
|
||||
if: ${{ forgejo.ref_type == 'branch' || needs.check.outputs.exists == 'false' }}
|
||||
@@ -148,6 +179,9 @@ jobs:
|
||||
version: ${{ needs.version.outputs.v }}
|
||||
secrets:
|
||||
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||
MAVEN_HOST: ${{ secrets.MAVEN_HOST }}
|
||||
MAVEN_USER: ${{ secrets.MAVEN_USER }}
|
||||
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
|
||||
|
||||
macos:
|
||||
if: ${{ forgejo.ref_type == 'branch' || needs.check.outputs.exists == 'false' }}
|
||||
@@ -158,6 +192,9 @@ jobs:
|
||||
version: ${{ needs.version.outputs.v }}
|
||||
secrets:
|
||||
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||
MAVEN_HOST: ${{ secrets.MAVEN_HOST }}
|
||||
MAVEN_USER: ${{ secrets.MAVEN_USER }}
|
||||
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
|
||||
|
||||
windows:
|
||||
if: ${{ forgejo.ref_type == 'branch' || needs.check.outputs.exists == 'false' }}
|
||||
@@ -168,19 +205,29 @@ jobs:
|
||||
version: ${{ needs.version.outputs.v }}
|
||||
secrets:
|
||||
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||
MAVEN_HOST: ${{ secrets.MAVEN_HOST }}
|
||||
MAVEN_USER: ${{ secrets.MAVEN_USER }}
|
||||
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
|
||||
|
||||
release:
|
||||
if: ${{ forgejo.ref_type == 'branch' || needs.check.outputs.exists == 'false' }}
|
||||
runs-on: ubuntu
|
||||
needs: [version, android_libs, android_release, linux, macos, windows]
|
||||
steps:
|
||||
- run: mkdir release
|
||||
- name: Download All Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: release
|
||||
pattern: release_*
|
||||
merge-multiple: true
|
||||
run: |
|
||||
curl -o android.tar.gz -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/android.tar.gz
|
||||
tar -xzf android.tar.gz
|
||||
rm android.tar.gz
|
||||
curl -o linux.tar.gz -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/linux.tar.gz
|
||||
tar -xzf linux.tar.gz
|
||||
rm linux.tar.gz
|
||||
curl -o macos.tar.gz -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/macos.tar.gz
|
||||
tar -xzf macos.tar.gz
|
||||
rm macos.tar.gz
|
||||
curl -o windows.tar.gz -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/windows.tar.gz
|
||||
tar -xzf windows.tar.gz
|
||||
rm windows.tar.gz
|
||||
- name: Upload release to Forgejo
|
||||
uses: ardocrat/forgejo-release@grim
|
||||
with:
|
||||
@@ -190,10 +237,10 @@ jobs:
|
||||
override: true
|
||||
prerelease: ${{ needs.version.outputs.pre }}
|
||||
release-dir: release
|
||||
release-notes: ""
|
||||
release-notes: "Full Changelog: [${{ needs.version.outputs.last_tag }}...${{ needs.version.outputs.v }}](https://code.gri.mw/${{ forgejo.repository }}/compare/${{ needs.version.outputs.last_tag }}...${{ needs.version.outputs.v }})"
|
||||
- name: Telegram Notify Channel
|
||||
if: always()
|
||||
uses: actions/telegram-notifier@ardocrat
|
||||
uses: actions/telegram-notifier@main
|
||||
with:
|
||||
api_url: ${{ secrets.TELEGRAM_API_URL }}
|
||||
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
@@ -202,7 +249,7 @@ jobs:
|
||||
notify_fields: "actor,repository,workflow,branch,commit"
|
||||
- name: Telegram Notify Group
|
||||
if: always()
|
||||
uses: actions/telegram-notifier@ardocrat
|
||||
uses: actions/telegram-notifier@main
|
||||
with:
|
||||
api_url: ${{ secrets.TELEGRAM_API_URL }}
|
||||
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
@@ -210,13 +257,13 @@ jobs:
|
||||
status: ${{ job.status }}
|
||||
notify_fields: "actor,repository,workflow,branch,commit"
|
||||
- name: Upload files to Telegram
|
||||
uses: ardocrat/tg-send-file-action@main
|
||||
uses: actions/telegram-send-file@main
|
||||
with:
|
||||
api_url: ${{ secrets.TELEGRAM_API_URL }}
|
||||
chat_ids: |
|
||||
${{ secrets.TELEGRAM_GROUP_ID }}
|
||||
${{ secrets.TELEGRAM_CHANNEL_ID }}
|
||||
body: "🎁 Release ${{ needs.version.outputs.v }} is ready!"
|
||||
${{ secrets.TELEGRAM_GROUP_ID }}
|
||||
body: '🎁 Release <a href="https://code.gri.mw/${{ forgejo.repository }}/releases/tag/${{ needs.version.outputs.v }}">${{ needs.version.outputs.v }}</a> is ready!'
|
||||
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||
pin: true
|
||||
files: |
|
||||
|
||||
@@ -13,15 +13,36 @@ jobs:
|
||||
with:
|
||||
submodules: recursive
|
||||
- run: mkdir release
|
||||
- name: Restore cargo cache
|
||||
id: cache-cargo-restore
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||
- name: Release Windows x86
|
||||
run: |
|
||||
cargo build --release --target x86_64-pc-windows-gnu
|
||||
zip grim-${{ inputs.version }}-win-x86_64.zip target/x86_64-pc-windows-gnu/release/grim.exe
|
||||
mv grim-${{ inputs.version }}-win-x86_64.zip release/
|
||||
- name: Save cargo cache
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
key: ${{ steps.cache-cargo-restore.outputs.cache-primary-key }}
|
||||
- name: Checksum Archive x86
|
||||
working-directory: release
|
||||
run: sha256sum grim-${{ inputs.version }}-win-x86_64.zip > grim-${{ inputs.version }}-win-x86_64-sha256sum.txt
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: release_windows
|
||||
path: release/*
|
||||
- name: Upload artifacts
|
||||
run: |
|
||||
tar -czf windows.tar.gz release
|
||||
curl -v -u ${{ secrets.MAVEN_USER }}:${{ secrets.MAVEN_PASSWORD }} --upload-file windows.tar.gz ${{ secrets.MAVEN_HOST }}/repository/grim-ci-artifacts/windows.tar.gz
|
||||
Reference in New Issue
Block a user