Files
2026-07-15 10:13:43 +00:00

321 lines
13 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# 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
# libarchive-tools -> bsdtar saglar, fpm'in pacman hedefi .MTREE
# dosyasini uretmek icin bunu kullaniyor
apt-get install -y ruby ruby-dev build-essential rpm zstd libarchive-tools
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 }}