Update .gitea/workflows/build.yml
Build repo add
This commit is contained in:
+221
-19
@@ -1,43 +1,85 @@
|
|||||||
|
# ============================================================
|
||||||
|
# Gitea Actions CI/CD - Gitea LibreTranslate (Ceviri Uygulamasi)
|
||||||
|
#
|
||||||
|
# Bu workflow ne yapar:
|
||||||
|
# 1) build-android -> Android APK derler
|
||||||
|
# 2) build-linux -> Linux masaustu binary'sini derler, ondan
|
||||||
|
# .deb / .rpm / .pkg.tar.zst (Arch) paketleri
|
||||||
|
# uretir ve bu 3 paketi dogrudan Gitea'nin
|
||||||
|
# Paket Kutuphanesi'ne (Package Registry) yayinlar
|
||||||
|
# (boylece dnf/apt/pacman ile otomatik guncelleme
|
||||||
|
# mumkun olur)
|
||||||
|
# 3) release -> Butun ciktilari (apk + deb + rpm + pacman) tek
|
||||||
|
# bir Gitea Release'ine ekler
|
||||||
|
#
|
||||||
|
# Sadece git TAG pushlandiginda calisir:
|
||||||
|
# git tag 1.0.0 && git push origin 1.0.0
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
name: Build Ceviri Uygulamasi
|
name: Build Ceviri Uygulamasi
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
# Sadece yeni bir tag pushlandığında çalışır (Örn: git tag 1.0.0 && git push origin 1.0.0)
|
|
||||||
tags:
|
tags:
|
||||||
- '*'
|
- '*' # normal commit'lerde DEGIL, sadece tag pushlaninca calisir
|
||||||
workflow_dispatch: {}
|
workflow_dispatch: {} # Gitea Actions sekmesinden elle "Run workflow" ile de tetiklenebilir
|
||||||
|
|
||||||
|
# Butun job/step'lere otomatik enjekte edilen ortak degerler.
|
||||||
|
env:
|
||||||
|
PACKAGE_NAME: gitea-libretranslate # deb/rpm/pacman uc formatta da kullanilan ayni paket adi
|
||||||
|
GITEA_OWNER: y1lm0z # Paket Kutuphanesi bir kullaniciya/orga baglidir
|
||||||
|
GITEA_HOST: git.y1lm0z.me
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
# ============================================================
|
||||||
|
# JOB 1: ANDROID APK
|
||||||
|
# ============================================================
|
||||||
build-android:
|
build-android:
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/cirruslabs/flutter:stable
|
image: ghcr.io/cirruslabs/flutter:stable # Flutter + Android SDK hazir gelen image
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
# checkout/upload-artifact gibi action'lar JS ile yazilmis, calismalari icin
|
||||||
|
# container icinde node bulunmasi sart. Bu image'da garanti olmadigindan
|
||||||
|
# elle kuruyoruz.
|
||||||
- name: Runner Hazirligi (Node ve Git)
|
- name: Runner Hazirligi (Node ve Git)
|
||||||
run: |
|
run: |
|
||||||
apt-get update && apt-get install -y git nodejs || true
|
apt-get update && apt-get install -y git nodejs || true
|
||||||
|
|
||||||
|
# Kaynak kodu indir. Gitea'nin kendi mirror'ini kullaniyoruz (gitea.com/actions/*),
|
||||||
|
# cunku bazi runner'lar github.com'a dogrudan erisemeyebiliyor.
|
||||||
- name: Kodu al
|
- name: Kodu al
|
||||||
uses: https://gitea.com/actions/checkout@v4
|
uses: https://gitea.com/actions/checkout@v4
|
||||||
|
|
||||||
|
# pubspec.yaml'daki tum paketleri (http, shared_preferences...) indirir.
|
||||||
- name: Bagimliliklari indir
|
- name: Bagimliliklari indir
|
||||||
run: flutter pub get
|
run: flutter pub get
|
||||||
|
|
||||||
|
# Release modda APK uretir.
|
||||||
- name: APK derle
|
- name: APK derle
|
||||||
run: flutter build apk --release
|
run: flutter build apk --release
|
||||||
|
|
||||||
|
# Uretilen APK'yi is akisi artifact deposuna yukler; 'release' job'u
|
||||||
|
# bunu indirip Gitea Release'ine ekleyecek.
|
||||||
- name: APK'yi artifact olarak yukle
|
- name: APK'yi artifact olarak yukle
|
||||||
uses: https://gitea.com/actions/upload-artifact@v3
|
uses: https://gitea.com/actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ceviri-android-apk
|
name: gitea-libretranslate-android-apk
|
||||||
path: build/app/outputs/flutter-apk/app-release.apk
|
path: build/app/outputs/flutter-apk/app-release.apk
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# JOB 2: LINUX DERLEME + DEB/RPM/PACMAN PAKETLEME + PAKET KUTUPHANESINE YAYIN
|
||||||
|
# ============================================================
|
||||||
build-linux:
|
build-linux:
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
container:
|
container:
|
||||||
image: ubuntu:24.04
|
image: ubuntu:24.04 # cıplak image, her sey asagida elle kuruluyor
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Node ve Git Kur (Action'ların çalışabilmesi için şart)
|
# Bu container'da hicbir sey kurulu degil; checkout action'i calismadan
|
||||||
|
# once Node ve Git'i biz kurmak zorundayiz.
|
||||||
|
- name: Node ve Git Kur (Action'larin calisabilmesi icin sart)
|
||||||
run: |
|
run: |
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y git nodejs curl unzip xz-utils
|
apt-get install -y git nodejs curl unzip xz-utils
|
||||||
@@ -45,12 +87,15 @@ jobs:
|
|||||||
- name: Kodu al
|
- name: Kodu al
|
||||||
uses: https://gitea.com/actions/checkout@v4
|
uses: https://gitea.com/actions/checkout@v4
|
||||||
|
|
||||||
|
# Flutter'in Linux masaustu derlemesi icin gereken derleyici ve kutuphaneler.
|
||||||
- name: Sistem bagimliliklarini kur
|
- name: Sistem bagimliliklarini kur
|
||||||
run: |
|
run: |
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y clang cmake ninja-build \
|
apt-get install -y clang cmake ninja-build \
|
||||||
pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev
|
pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev
|
||||||
|
|
||||||
|
# Flutter SDK'yi apt yerine git'ten cekiyoruz; boylece distro farki
|
||||||
|
# (ubuntu/fedora/arch) onemsiz, her yerde ayni sekilde calisir.
|
||||||
- name: Flutter SDK kur
|
- name: Flutter SDK kur
|
||||||
run: |
|
run: |
|
||||||
git clone https://github.com/flutter/flutter.git -b stable --depth 1 /opt/flutter
|
git clone https://github.com/flutter/flutter.git -b stable --depth 1 /opt/flutter
|
||||||
@@ -67,28 +112,182 @@ jobs:
|
|||||||
export PATH="/opt/flutter/bin:$PATH"
|
export PATH="/opt/flutter/bin:$PATH"
|
||||||
flutter pub get
|
flutter pub get
|
||||||
|
|
||||||
|
# Gercek binary + kaynaklari (build/linux/x64/release/bundle/) uretir.
|
||||||
- name: Linux derle
|
- name: Linux derle
|
||||||
run: |
|
run: |
|
||||||
export PATH="/opt/flutter/bin:$PATH"
|
export PATH="/opt/flutter/bin:$PATH"
|
||||||
flutter build linux --release
|
flutter build linux --release
|
||||||
|
|
||||||
- name: Bundle'i sikistir
|
# Git tag'inden (ornek: v1.2.0) paket surumunu turetiyoruz:
|
||||||
|
# - basindaki 'v' siliniyor -> 1.2.0
|
||||||
|
# - '-' karakteri '.' ile degistiriliyor (Arch pkgver'de '-' YASAK)
|
||||||
|
# Boylece tek bir surum stringi 3 formatta da sorunsuz kullanilabiliyor.
|
||||||
|
- name: Surum numarasini hazirla
|
||||||
|
id: version
|
||||||
run: |
|
run: |
|
||||||
cd build/linux/x64/release
|
CLEAN_VERSION="$(echo "$GITHUB_REF_NAME" | sed 's/^v//; s/-/./g')"
|
||||||
tar -czf ceviri-linux-bundle.tar.gz bundle
|
echo "version=$CLEAN_VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Kullanilacak surum: $CLEAN_VERSION"
|
||||||
|
|
||||||
- name: Linux bundle'i artifact olarak yukle
|
# fpm (Effing Package Management): tek komutla deb + rpm + pacman uretebilen
|
||||||
|
# Ruby araci. Ayri fedora/archlinux container'i acmaya gerek birakmiyor.
|
||||||
|
- name: fpm kur
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
# ruby -> fpm'in calisma zamani
|
||||||
|
# ruby-dev/build-essential -> bazi ruby gem'leri native derleniyor
|
||||||
|
# rpm -> .rpm meta verisi icin destek araclari
|
||||||
|
# zstd -> pacman paketinin sikistirma formati
|
||||||
|
apt-get install -y ruby ruby-dev build-essential rpm zstd
|
||||||
|
gem install --no-document fpm
|
||||||
|
|
||||||
|
# Flutter'in urettigi ham "bundle/" klasorunu, gercek bir Linux paketinin
|
||||||
|
# bekledigi standart dizin yapisina (FHS) yerlestiriyoruz:
|
||||||
|
# /usr/lib/gitea-libretranslate/ -> uygulamanin tum dosyalari
|
||||||
|
# /usr/bin/gitea-libretranslate -> terminal/menuden calistirma komutu
|
||||||
|
# /usr/share/applications/... -> uygulama menusunde gorunmesi icin
|
||||||
|
- name: Paket icin dosya yapisini hazirla
|
||||||
|
run: |
|
||||||
|
STAGE=staging
|
||||||
|
rm -rf "$STAGE"
|
||||||
|
mkdir -p "$STAGE/usr/lib/${PACKAGE_NAME}"
|
||||||
|
mkdir -p "$STAGE/usr/bin"
|
||||||
|
mkdir -p "$STAGE/usr/share/applications"
|
||||||
|
|
||||||
|
# Derlenen tum dosyalari (binary + data/ + lib/) kopyala.
|
||||||
|
cp -r build/linux/x64/release/bundle/* "$STAGE/usr/lib/${PACKAGE_NAME}/"
|
||||||
|
|
||||||
|
# /usr/bin altina kucuk bir baslatici script koy.
|
||||||
|
# (linux/CMakeLists.txt icindeki BINARY_NAME "libretranslate" oldugu icin
|
||||||
|
# gercek calistirilabilir dosyanin adi budur.)
|
||||||
|
cat > "$STAGE/usr/bin/${PACKAGE_NAME}" << 'EOF'
|
||||||
|
#!/bin/sh
|
||||||
|
exec /usr/lib/gitea-libretranslate/libretranslate "$@"
|
||||||
|
EOF
|
||||||
|
chmod +x "$STAGE/usr/bin/${PACKAGE_NAME}"
|
||||||
|
|
||||||
|
# Uygulama menusunde gorunmesi icin .desktop dosyasi.
|
||||||
|
cat > "$STAGE/usr/share/applications/${PACKAGE_NAME}.desktop" << EOF
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=Gitea LibreTranslate
|
||||||
|
Comment=Kendi LibreTranslate sunucunuza baglanan ceviri uygulamasi
|
||||||
|
Exec=${PACKAGE_NAME}
|
||||||
|
Icon=accessories-dictionary
|
||||||
|
Terminal=false
|
||||||
|
Categories=Utility;Office;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Ayni "staging/" klasorunden uc farkli paket formati uretiliyor.
|
||||||
|
# -C staging . -> staging/usr/... yapisini paketin kok dizini (/) gibi kullan.
|
||||||
|
- name: deb paketi olustur
|
||||||
|
run: |
|
||||||
|
fpm -s dir -t deb \
|
||||||
|
-n "${PACKAGE_NAME}" \
|
||||||
|
-v "${{ steps.version.outputs.version }}" \
|
||||||
|
--architecture amd64 \
|
||||||
|
--depends libgtk-3-0 \
|
||||||
|
--description "Kendi LibreTranslate sunucunuza baglanan ceviri uygulamasi" \
|
||||||
|
--url "https://${GITEA_HOST}/${GITEA_OWNER}/Libretranslate-app" \
|
||||||
|
--maintainer "${GITEA_OWNER}" \
|
||||||
|
--license MIT \
|
||||||
|
-C staging .
|
||||||
|
|
||||||
|
- name: rpm paketi olustur
|
||||||
|
run: |
|
||||||
|
fpm -s dir -t rpm \
|
||||||
|
-n "${PACKAGE_NAME}" \
|
||||||
|
-v "${{ steps.version.outputs.version }}" \
|
||||||
|
--architecture x86_64 \
|
||||||
|
--depends gtk3 \
|
||||||
|
--description "Kendi LibreTranslate sunucunuza baglanan ceviri uygulamasi" \
|
||||||
|
--url "https://${GITEA_HOST}/${GITEA_OWNER}/Libretranslate-app" \
|
||||||
|
--maintainer "${GITEA_OWNER}" \
|
||||||
|
--license MIT \
|
||||||
|
-C staging .
|
||||||
|
|
||||||
|
- name: pacman (Arch) paketi olustur
|
||||||
|
run: |
|
||||||
|
fpm -s dir -t pacman \
|
||||||
|
-n "${PACKAGE_NAME}" \
|
||||||
|
-v "${{ steps.version.outputs.version }}" \
|
||||||
|
--architecture x86_64 \
|
||||||
|
--depends gtk3 \
|
||||||
|
--description "Kendi LibreTranslate sunucunuza baglanan ceviri uygulamasi" \
|
||||||
|
--url "https://${GITEA_HOST}/${GITEA_OWNER}/Libretranslate-app" \
|
||||||
|
--maintainer "${GITEA_OWNER}" \
|
||||||
|
--license MIT \
|
||||||
|
-C staging .
|
||||||
|
|
||||||
|
# fpm'in urettigi dosya adlarini (surum/mimari otomatik eklendigi icin
|
||||||
|
# tam adlari degisken) bulup sonraki adimlarda kullanmak uzere kaydediyoruz.
|
||||||
|
- name: Paket dosyalarini bul
|
||||||
|
id: files
|
||||||
|
run: |
|
||||||
|
echo "deb=$(find . -maxdepth 1 -name '*.deb' | head -n1)" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "rpm=$(find . -maxdepth 1 -name '*.rpm' | head -n1)" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "pkg=$(find . -maxdepth 1 -name '*.pkg.tar.zst' | head -n1)" >> "$GITHUB_OUTPUT"
|
||||||
|
ls -la *.deb *.rpm *.pkg.tar.zst
|
||||||
|
|
||||||
|
# Uc paketi de artifact olarak yukle (release job'u bunlari Release'e ekleyecek).
|
||||||
|
- name: Linux paketlerini artifact olarak yukle
|
||||||
uses: https://gitea.com/actions/upload-artifact@v3
|
uses: https://gitea.com/actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ceviri-linux-bundle
|
name: gitea-libretranslate-linux-packages
|
||||||
path: build/linux/x64/release/ceviri-linux-bundle.tar.gz
|
path: |
|
||||||
|
*.deb
|
||||||
|
*.rpm
|
||||||
|
*.pkg.tar.zst
|
||||||
|
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
# BURADAN ITIBAREN: Gitea Paket Kutuphanesi'ne DOGRUDAN yayin.
|
||||||
|
# Bu adimlar sayesinde paketler Release'de duran statik dosyalar olmanin
|
||||||
|
# otesinde, dnf/apt/pacman tarafindan GERCEK BIR REPO gibi gorulur ve
|
||||||
|
# "sudo dnf update" / "sudo apt update" / "sudo pacman -Syu" ile
|
||||||
|
# otomatik guncellenir.
|
||||||
|
# PACKAGE_TOKEN: Gitea'da "package" (write) yetkisiyle olusturulup
|
||||||
|
# repo/organizasyon Secrets kismina eklenmis kisisel erisim anahtari.
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: RPM paketini Gitea Paket Kutuphanesi'ne yayinla
|
||||||
|
run: |
|
||||||
|
curl --fail --user "${GITEA_OWNER}:${{ secrets.PACKAGE_TOKEN }}" \
|
||||||
|
--upload-file "${{ steps.files.outputs.rpm }}" \
|
||||||
|
"https://${GITEA_HOST}/api/packages/${GITEA_OWNER}/rpm/upload"
|
||||||
|
|
||||||
|
# Debian registry'sinde yol icinde distribution+component var; ikisini de
|
||||||
|
# sabit/genel-gecer tutuyoruz ("any" / "main") - apt sources.list'te de
|
||||||
|
# ayni degerler kullanilacak.
|
||||||
|
- name: DEB paketini Gitea Paket Kutuphanesi'ne yayinla
|
||||||
|
run: |
|
||||||
|
curl --fail --user "${GITEA_OWNER}:${{ secrets.PACKAGE_TOKEN }}" \
|
||||||
|
-X PUT \
|
||||||
|
--upload-file "${{ steps.files.outputs.deb }}" \
|
||||||
|
"https://${GITEA_HOST}/api/packages/${GITEA_OWNER}/debian/pool/any/main/upload"
|
||||||
|
|
||||||
|
# Arch registry'sinde bir "repository" (grup) adi gerekiyor; "main" kullaniyoruz,
|
||||||
|
# pacman.conf'ta da ayni ismi kullanacaksin.
|
||||||
|
- name: Arch paketini Gitea Paket Kutuphanesi'ne yayinla
|
||||||
|
run: |
|
||||||
|
curl --fail --user "${GITEA_OWNER}:${{ secrets.PACKAGE_TOKEN }}" \
|
||||||
|
--upload-file "${{ steps.files.outputs.pkg }}" \
|
||||||
|
"https://${GITEA_HOST}/api/packages/${GITEA_OWNER}/arch/main"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# JOB 3: TUM CIKTILARI TEK BIR GITEA RELEASE'INE EKLE
|
||||||
|
# ============================================================
|
||||||
release:
|
release:
|
||||||
name: Gitea Release Olustur
|
name: Gitea Release Olustur
|
||||||
needs: [build-android, build-linux]
|
needs: [build-android, build-linux] # once iki derleme de bitmis olmali
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
|
# Otomatik saglanan secrets.GITEA_TOKEN'in bu job'da Release olusturma/dosya
|
||||||
|
# yukleme (write) yetkisine sahip oldugundan emin olmak icin acikca istiyoruz.
|
||||||
|
# (Bazi Gitea kurulumlarinda varsayilan yetki salt-okunur olabiliyor.)
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
container:
|
container:
|
||||||
image: ubuntu:24.04
|
image: ubuntu:24.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Node, Git ve Sertifikalari Kur
|
- name: Node, Git ve Sertifikalari Kur
|
||||||
run: |
|
run: |
|
||||||
@@ -98,20 +297,23 @@ jobs:
|
|||||||
- name: Android APK'yi indir
|
- name: Android APK'yi indir
|
||||||
uses: https://gitea.com/actions/download-artifact@v3
|
uses: https://gitea.com/actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ceviri-android-apk
|
name: gitea-libretranslate-android-apk
|
||||||
path: release-assets/
|
path: release-assets/
|
||||||
|
|
||||||
- name: Linux Bundle'i indir
|
- name: Linux paketlerini indir
|
||||||
uses: https://gitea.com/actions/download-artifact@v3
|
uses: https://gitea.com/actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ceviri-linux-bundle
|
name: gitea-libretranslate-linux-packages
|
||||||
path: release-assets/
|
path: release-assets/
|
||||||
|
|
||||||
- name: Gitea'da Sürümü Yükle
|
# apk + deb + rpm + pacman -> hepsi tek Release'e, tag adi basliginda.
|
||||||
|
- name: Gitea'da Surumu Yukle
|
||||||
uses: https://gitea.com/actions/gitea-release-action@main
|
uses: https://gitea.com/actions/gitea-release-action@main
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
release-assets/app-release.apk
|
release-assets/app-release.apk
|
||||||
release-assets/ceviri-linux-bundle.tar.gz
|
release-assets/*.deb
|
||||||
|
release-assets/*.rpm
|
||||||
|
release-assets/*.pkg.tar.zst
|
||||||
title: Release ${{ github.ref_name }}
|
title: Release ${{ github.ref_name }}
|
||||||
api_key: ${{ secrets.GITEA_TOKEN }}
|
api_key: ${{ secrets.GITEA_TOKEN }}
|
||||||
Reference in New Issue
Block a user