Skill: Multi-Distro Testing

> Docker container'larda 5 dağıtım test matrisi çalıştırma ve hata çözümleme

6 stars

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

$curl -o ~/.claude/skills/multi-distro-testing/SKILL.md --create-dirs "https://raw.githubusercontent.com/CalmKernelTR/bigfive-updater/main/.agents/skills/multi-distro-testing/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/multi-distro-testing/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How Skill: Multi-Distro Testing Compares

Feature / AgentSkill: Multi-Distro TestingStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/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

6
from CalmKernelTR/bigfive-updater

> ShellCheck + shfmt + BATS test çalıştırma ve hata düzeltme

Skill: Paket Build ve Doğrulama

6
from CalmKernelTR/bigfive-updater

> AUR, Alpine APK ve RPM paket build süreçleri ve doğrulama adımları

Skill: i18n Senkronizasyon

6
from CalmKernelTR/bigfive-updater

> TR/EN dil dosyaları arasında mesaj senkronizasyonu ve tutarlılık kontrolü

swift-protocol-di-testing

144923
from affaan-m/everything-claude-code

基于协议的依赖注入,用于可测试的Swift代码——使用聚焦协议和Swift Testing模拟文件系统、网络和外部API。

DevelopmentClaude

perl-testing

144923
from affaan-m/everything-claude-code

使用Test2::V0、Test::More、prove runner、模拟、Devel::Cover覆盖率和TDD方法的Perl测试模式。

DevelopmentClaude

compose-multiplatform-patterns

144923
from affaan-m/everything-claude-code

KMP项目中的Compose Multiplatform和Jetpack Compose模式——状态管理、导航、主题化、性能优化和平台特定UI。

ai-regression-testing

144923
from affaan-m/everything-claude-code

AI辅助开发的回归测试策略。沙盒模式API测试,无需依赖数据库,自动化的缺陷检查工作流程,以及捕捉AI盲点的模式,其中同一模型编写和审查代码。

Software TestingClaudeCursorCodex

rust-testing

144923
from affaan-m/everything-claude-code

Rust testing patterns including unit tests, integration tests, async testing, property-based testing, mocking, and coverage. Follows TDD methodology.

DevelopmentClaude

kotlin-testing

144923
from affaan-m/everything-claude-code

Kotest, MockK, coroutine testi, property-based testing ve Kover coverage ile Kotlin test kalıpları. İdiomatic Kotlin uygulamalarıyla TDD metodolojisini takip eder.

DevelopmentClaude

cpp-testing

144923
from affaan-m/everything-claude-code

C++ テストの作成/更新/修正、GoogleTest/CTest の設定、失敗またはフレーキーなテストの診断、カバレッジ/サニタイザーの追加時にのみ使用します。

DevelopmentClaude

python-testing

144923
from affaan-m/everything-claude-code

Python testing best practices using pytest including fixtures, parametrization, mocking, coverage analysis, async testing, and test organization. Use when writing or improving Python tests.

DevelopmentClaude

golang-testing

144923
from affaan-m/everything-claude-code

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.

DevelopmentClaude