319 lines
13 KiB
YAML
319 lines
13 KiB
YAML
# ============================================================
|
||
# 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
|
||
|
||
on:
|
||
push:
|
||
tags:
|
||
- '*' # normal commit'lerde DEGIL, sadece tag pushlaninca calisir
|
||
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:
|
||
# ============================================================
|
||
# JOB 1: ANDROID APK
|
||
# ============================================================
|
||
build-android:
|
||
runs-on: docker
|
||
container:
|
||
image: ghcr.io/cirruslabs/flutter:stable # Flutter + Android SDK hazir gelen image
|
||
|
||
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)
|
||
run: |
|
||
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
|
||
uses: https://gitea.com/actions/checkout@v4
|
||
|
||
# pubspec.yaml'daki tum paketleri (http, shared_preferences...) indirir.
|
||
- name: Bagimliliklari indir
|
||
run: flutter pub get
|
||
|
||
# Release modda APK uretir.
|
||
- name: APK derle
|
||
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
|
||
uses: https://gitea.com/actions/upload-artifact@v3
|
||
with:
|
||
name: gitea-libretranslate-android-apk
|
||
path: build/app/outputs/flutter-apk/app-release.apk
|
||
|
||
# ============================================================
|
||
# JOB 2: LINUX DERLEME + DEB/RPM/PACMAN PAKETLEME + PAKET KUTUPHANESINE YAYIN
|
||
# ============================================================
|
||
build-linux:
|
||
runs-on: docker
|
||
container:
|
||
image: ubuntu:24.04 # cıplak image, her sey asagida elle kuruluyor
|
||
|
||
steps:
|
||
# 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: |
|
||
apt-get update
|
||
apt-get install -y git nodejs curl unzip xz-utils
|
||
|
||
- name: Kodu al
|
||
uses: https://gitea.com/actions/checkout@v4
|
||
|
||
# Flutter'in Linux masaustu derlemesi icin gereken derleyici ve kutuphaneler.
|
||
- name: Sistem bagimliliklarini kur
|
||
run: |
|
||
apt-get update
|
||
apt-get install -y clang cmake ninja-build \
|
||
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
|
||
run: |
|
||
git clone https://github.com/flutter/flutter.git -b stable --depth 1 /opt/flutter
|
||
echo "/opt/flutter/bin" >> "$GITHUB_PATH"
|
||
|
||
- name: Linux masaustu destegini ac
|
||
run: |
|
||
export PATH="/opt/flutter/bin:$PATH"
|
||
flutter config --enable-linux-desktop
|
||
flutter doctor
|
||
|
||
- name: Bagimliliklari indir
|
||
run: |
|
||
export PATH="/opt/flutter/bin:$PATH"
|
||
flutter pub get
|
||
|
||
# Gercek binary + kaynaklari (build/linux/x64/release/bundle/) uretir.
|
||
- name: Linux derle
|
||
run: |
|
||
export PATH="/opt/flutter/bin:$PATH"
|
||
flutter build linux --release
|
||
|
||
# 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: |
|
||
CLEAN_VERSION="$(echo "$GITHUB_REF_NAME" | sed 's/^v//; s/-/./g')"
|
||
echo "version=$CLEAN_VERSION" >> "$GITHUB_OUTPUT"
|
||
echo "Kullanilacak surum: $CLEAN_VERSION"
|
||
|
||
# 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
|
||
with:
|
||
name: gitea-libretranslate-linux-packages
|
||
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:
|
||
name: Gitea Release Olustur
|
||
needs: [build-android, build-linux] # once iki derleme de bitmis olmali
|
||
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:
|
||
image: ubuntu:24.04
|
||
|
||
steps:
|
||
- name: Node, Git ve Sertifikalari Kur
|
||
run: |
|
||
apt-get update
|
||
apt-get install -y git nodejs curl ca-certificates
|
||
|
||
- name: Android APK'yi indir
|
||
uses: https://gitea.com/actions/download-artifact@v3
|
||
with:
|
||
name: gitea-libretranslate-android-apk
|
||
path: release-assets/
|
||
|
||
- name: Linux paketlerini indir
|
||
uses: https://gitea.com/actions/download-artifact@v3
|
||
with:
|
||
name: gitea-libretranslate-linux-packages
|
||
path: release-assets/
|
||
|
||
# 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
|
||
with:
|
||
files: |
|
||
release-assets/app-release.apk
|
||
release-assets/*.deb
|
||
release-assets/*.rpm
|
||
release-assets/*.pkg.tar.zst
|
||
title: Release ${{ github.ref_name }}
|
||
api_key: ${{ secrets.GITEA_TOKEN }} |