Update .gitea/workflows/build.yml
Build Ceviri Uygulamasi / build-linux (push) Failing after 5m50s
Build Ceviri Uygulamasi / Gitea Release Olustur (push) Has been cancelled
Build Ceviri Uygulamasi / build-android (push) Has been cancelled

Build repo add
This commit is contained in:
2026-07-15 10:04:25 +00:00
parent 8c3248ed74
commit 2e2ab88209
+221 -19
View File
@@ -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
on:
push:
# Sadece yeni bir tag pushlandığında çalışır (Örn: git tag 1.0.0 && git push origin 1.0.0)
tags:
- '*'
workflow_dispatch: {}
- '*' # 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
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: ceviri-android-apk
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
image: ubuntu:24.04 # cıplak image, her sey asagida elle kuruluyor
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: |
apt-get update
apt-get install -y git nodejs curl unzip xz-utils
@@ -45,12 +87,15 @@ jobs:
- 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
@@ -67,28 +112,182 @@ jobs:
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
- 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: |
cd build/linux/x64/release
tar -czf ceviri-linux-bundle.tar.gz bundle
CLEAN_VERSION="$(echo "$GITHUB_REF_NAME" | sed 's/^v//; s/-/./g')"
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
with:
name: ceviri-linux-bundle
path: build/linux/x64/release/ceviri-linux-bundle.tar.gz
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]
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: |
@@ -98,20 +297,23 @@ jobs:
- name: Android APK'yi indir
uses: https://gitea.com/actions/download-artifact@v3
with:
name: ceviri-android-apk
name: gitea-libretranslate-android-apk
path: release-assets/
- name: Linux Bundle'i indir
- name: Linux paketlerini indir
uses: https://gitea.com/actions/download-artifact@v3
with:
name: ceviri-linux-bundle
name: gitea-libretranslate-linux-packages
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
with:
files: |
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 }}
api_key: ${{ secrets.GITEA_TOKEN }}