Skill: Multi-Distro Testing
> Docker container'larda 5 dağıtım test matrisi çalıştırma ve hata çözümleme
Best use case
Skill: Multi-Distro Testing is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
> Docker container'larda 5 dağıtım test matrisi çalıştırma ve hata çözümleme
Teams using Skill: Multi-Distro Testing should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/multi-distro-testing/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How Skill: Multi-Distro Testing Compares
| Feature / Agent | Skill: Multi-Distro Testing | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
> Docker container'larda 5 dağıtım test matrisi çalıştırma ve hata çözümleme
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Skill: Multi-Distro Testing
> Docker container'larda 5 dağıtım test matrisi çalıştırma ve hata çözümleme
---
## Ön Koşullar
- Docker kurulu ve çalışıyor olmalı
- İnternet bağlantısı (container image pull için)
- `tests/docker/base/` altında Dockerfile'lar mevcut
---
## Desteklenen Dağıtımlar
| Distro | Base Image | Paket Yöneticisi | CI Container |
|--------|-----------|------------------|--------------|
| Ubuntu 24.04 | `ubuntu:24.04` | APT | `ghcr.io/ahm3t0t/bigfive-base-ubuntu:latest` |
| Fedora 40 | `fedora:40` | DNF | `ghcr.io/ahm3t0t/bigfive-base-fedora:latest` |
| Arch Linux | `archlinux:latest` | Pacman | `ghcr.io/ahm3t0t/bigfive-base-arch:latest` |
| openSUSE Leap 15.6 | `opensuse/leap:15.6` | Zypper | `ghcr.io/ahm3t0t/bigfive-base-opensuse:latest` |
| Alpine 3.20 | `alpine:3.20` | APK | `ghcr.io/ahm3t0t/bigfive-base-alpine:latest` |
---
## Adım 1: Lokal Docker Test (Tek Distro)
### Ubuntu/Debian
```bash
docker run --rm -v "$(pwd):/src" ubuntu:24.04 bash -c '
apt-get update && apt-get install -y curl bash sudo
cp /src/guncel /usr/local/bin/guncel
chmod +x /usr/local/bin/guncel
mkdir -p /usr/local/share/bigfive-updater/lang
cp /src/lang/*.sh /usr/local/share/bigfive-updater/lang/
guncel --help
guncel --doctor
guncel --dry-run --auto
guncel --json --dry-run --auto
guncel --history
'
```
### Fedora
```bash
docker run --rm -v "$(pwd):/src" fedora:40 bash -c '
dnf install -y curl bash sudo
cp /src/guncel /usr/local/bin/guncel
chmod +x /usr/local/bin/guncel
mkdir -p /usr/local/share/bigfive-updater/lang
cp /src/lang/*.sh /usr/local/share/bigfive-updater/lang/
guncel --help
guncel --doctor
guncel --dry-run --auto
'
```
### Arch Linux
```bash
docker run --rm -v "$(pwd):/src" archlinux:latest bash -c '
pacman -Sy --noconfirm curl bash sudo
cp /src/guncel /usr/local/bin/guncel
chmod +x /usr/local/bin/guncel
mkdir -p /usr/local/share/bigfive-updater/lang
cp /src/lang/*.sh /usr/local/share/bigfive-updater/lang/
guncel --help
guncel --doctor
guncel --dry-run --auto
'
```
### openSUSE
```bash
docker run --rm -v "$(pwd):/src" opensuse/leap:15.6 bash -c '
zypper -n install curl bash sudo
cp /src/guncel /usr/local/bin/guncel
chmod +x /usr/local/bin/guncel
mkdir -p /usr/local/share/bigfive-updater/lang
cp /src/lang/*.sh /usr/local/share/bigfive-updater/lang/
guncel --help
guncel --doctor
guncel --dry-run --auto
'
```
### Alpine
```bash
docker run --rm -v "$(pwd):/src" alpine:3.20 sh -c '
apk add --no-cache bash curl sudo coreutils
cp /src/guncel /usr/local/bin/guncel
chmod +x /usr/local/bin/guncel
mkdir -p /usr/local/share/bigfive-updater/lang
cp /src/lang/*.sh /usr/local/share/bigfive-updater/lang/
guncel --help
guncel --doctor
guncel --dry-run --auto
'
```
---
## Adım 2: Tüm Distrolarda Test (Script)
Aşağıdaki komutları sırayla çalıştırarak tüm dağıtımları test et:
```bash
DISTROS=("ubuntu:24.04" "fedora:40" "archlinux:latest" "opensuse/leap:15.6" "alpine:3.20")
INSTALL_CMD=("apt-get update && apt-get install -y curl bash sudo" \
"dnf install -y curl bash sudo" \
"pacman -Sy --noconfirm curl bash sudo" \
"zypper -n install curl bash sudo" \
"apk add --no-cache bash curl sudo coreutils")
for i in "${!DISTROS[@]}"; do
echo "=== Testing ${DISTROS[$i]} ==="
docker run --rm -v "$(pwd):/src" "${DISTROS[$i]}" bash -c "
${INSTALL_CMD[$i]}
cp /src/guncel /usr/local/bin/guncel
chmod +x /usr/local/bin/guncel
mkdir -p /usr/local/share/bigfive-updater/lang
cp /src/lang/*.sh /usr/local/share/bigfive-updater/lang/
echo '--- --help ---'
guncel --help
echo '--- --doctor ---'
guncel --doctor
echo '--- --dry-run ---'
guncel --dry-run --auto
"
echo ""
done
```
---
## Adım 3: install.sh Test
Her distro'da kurulum scriptini test et:
```bash
docker run --rm -v "$(pwd):/src" ubuntu:24.04 bash -c '
apt-get update && apt-get install -y curl bash sudo gpg
bash /src/install.sh --local
guncel --help
guncel --uninstall --purge
'
```
`install.sh --local` parametresi: GitHub'dan indirmek yerine yerel dosyaları kullanır.
---
## Adım 4: CI Pipeline (GitHub Actions)
CI'da `ci.yml` workflow'u otomatik olarak 5 distro test çalıştırır:
```yaml
strategy:
fail-fast: false
matrix:
include:
- distro: ubuntu
image: ghcr.io/ahm3t0t/bigfive-base-ubuntu:latest
- distro: fedora
image: ghcr.io/ahm3t0t/bigfive-base-fedora:latest
- distro: arch
image: ghcr.io/ahm3t0t/bigfive-base-arch:latest
- distro: opensuse
image: ghcr.io/ahm3t0t/bigfive-base-opensuse:latest
- distro: alpine
image: ghcr.io/ahm3t0t/bigfive-base-alpine:latest
```
---
## Yaygın Hatalar ve Çözümleri
### 1. Alpine'da `grep -P` hatası
```
grep: unrecognized option: P
```
**Çözüm:** `grep -P` yerine `grep -E` veya `grep -oE` kullan. Alpine'da GNU grep yerine BusyBox grep gelir.
### 2. Fedora'da DNF kilidi
```
Error: Could not open lock file /var/cache/dnf/metadata_lock.pid
```
**Çözüm:** Container'da genellikle sorun olmaz. Host'ta `sudo rm /var/cache/dnf/metadata_lock.pid` veya bekleme.
### 3. Arch'da keyring hatası
```
error: required key missing from keyring
```
**Çözüm:** `pacman-key --init && pacman-key --populate archlinux` çalıştır.
### 4. openSUSE'de GPG import hatası
```
Warning: Digest verification failed
```
**Çözüm:** `zypper --gpg-auto-import-keys refresh` çalıştır.
### 5. Container'da flock çalışmıyor
```
flock: open lock file failed
```
**Çözüm:** `guncel` container ortamını tespit eder ve uyarı verir. `--skip system` ile test edilebilir.
### 6. CI'da "DOCS-ONLY CHANGE" mesajı
CI, sadece `*.md`, `docs/`, `LICENSE` gibi dosyalar değiştiyse testleri atlar. Kod değişikliği yoksa bu beklenen davranıştır.
---
## Base Image Güncelleme
Docker base image'ler `docker-base-images.yml` workflow'u ile güncellenir:
```bash
# tests/docker/base/ altındaki Dockerfile'lar değişince
# otomatik olarak GHCR'a push edilir
# Manuel tetikleme: Actions → Docker Base Images → Run workflow
```Related Skills
Skill: Shell Lint ve Test
> ShellCheck + shfmt + BATS test çalıştırma ve hata düzeltme
Skill: Paket Build ve Doğrulama
> AUR, Alpine APK ve RPM paket build süreçleri ve doğrulama adımları
Skill: i18n Senkronizasyon
> TR/EN dil dosyaları arasında mesaj senkronizasyonu ve tutarlılık kontrolü
swift-protocol-di-testing
基于协议的依赖注入,用于可测试的Swift代码——使用聚焦协议和Swift Testing模拟文件系统、网络和外部API。
perl-testing
使用Test2::V0、Test::More、prove runner、模拟、Devel::Cover覆盖率和TDD方法的Perl测试模式。
compose-multiplatform-patterns
KMP项目中的Compose Multiplatform和Jetpack Compose模式——状态管理、导航、主题化、性能优化和平台特定UI。
ai-regression-testing
AI辅助开发的回归测试策略。沙盒模式API测试,无需依赖数据库,自动化的缺陷检查工作流程,以及捕捉AI盲点的模式,其中同一模型编写和审查代码。
rust-testing
Rust testing patterns including unit tests, integration tests, async testing, property-based testing, mocking, and coverage. Follows TDD methodology.
kotlin-testing
Kotest, MockK, coroutine testi, property-based testing ve Kover coverage ile Kotlin test kalıpları. İdiomatic Kotlin uygulamalarıyla TDD metodolojisini takip eder.
cpp-testing
C++ テストの作成/更新/修正、GoogleTest/CTest の設定、失敗またはフレーキーなテストの診断、カバレッジ/サニタイザーの追加時にのみ使用します。
python-testing
Python testing best practices using pytest including fixtures, parametrization, mocking, coverage analysis, async testing, and test organization. Use when writing or improving Python tests.
golang-testing
Go testing best practices including table-driven tests, test helpers, benchmarking, race detection, coverage analysis, and integration testing patterns. Use when writing or improving Go tests.