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
|
||||
|
||||
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 }}
|
||||
Reference in New Issue
Block a user