Files
claude-plugins/acidaos/skills/devops/SKILL.md
T

4.9 KiB

name, description, allowed-tools, layer
name description allowed-tools layer
devops CI/CD pipelines para o AcidaOS via Gitea Actions — build, test, deploy para acidaos-core (Rust) e acidaos-dashboard (Next.js). Usar quando "pipeline acidaos", "gitea actions acidaos", "ci cd acidaos", "deploy acidaos", "workflow acidaos". Read, Write, Edit, Bash, mcp__gitea__list_repo_action_workflows, mcp__gitea__get_repo_action_workflow, mcp__gitea__create_file, mcp__gitea__update_file, mcp__mem_search_memories wiki

AcidaOS DevOps — Gitea Actions

Skill para criar e gerir pipelines CI/CD do AcidaOS via Gitea Actions.

Atenção: O AcidaOS usa Gitea Actions, não GitHub Actions. A sintaxe é compatível mas o runner é self-hosted em gateway.descomplicar.pt.

Contexto

Repositórios Gitea:
  acidaos-core      → Rust Core
  acidaos-dashboard → Next.js Dashboard

Runners:
  self-hosted @ gateway.descomplicar.pt
  Labels: [self-hosted, linux, rust, node]

Deploy target:
  EasyPanel (projectName: "descomplicar")
  acidaos-core    → serviceName: "acidaos-core"
  acidaos-dashboard → serviceName: "acidaos-dashboard"

Protocolo Inicial

mcp__mem_search_memories "acidaos devops pipeline"
mcp__gitea__list_repo_action_workflows <repo>  # ver workflows existentes

Pipelines Disponíveis

1. Core Rust — CI Pipeline

Ficheiro: .gitea/workflows/ci.yml

name: AcidaOS Core CI

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  check:
    name: Verificar código
    runs-on: [self-hosted, linux, rust]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Cache Cargo
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Cargo check
        run: cargo check --all-features

      - name: Clippy
        run: cargo clippy --all-features -- -D warnings

      - name: Formatação
        run: cargo fmt --all -- --check

  test:
    name: Testes
    needs: check
    runs-on: [self-hosted, linux, rust]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Cache Cargo
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Testes unitários
        run: cargo test --all-features

      - name: Testes de integração
        run: cargo test --test '*' --all-features
        env:
          ACIDAOS_ENV: test
          DATABASE_URL: ${{ secrets.TEST_DATABASE_URL }}

  security:
    name: Auditoria de segurança
    runs-on: [self-hosted, linux, rust]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: cargo-audit
        run: |
          cargo install cargo-audit --quiet
          cargo audit

2. Core Rust — Deploy Pipeline

Ficheiro: .gitea/workflows/deploy.yml

name: AcidaOS Core Deploy

on:
  push:
    branches: [main]
    tags: ['v*']

jobs:
  deploy:
    name: Deploy para EasyPanel
    runs-on: [self-hosted, linux, rust]
    environment: production
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Build release
        run: cargo build --release

      - name: Build Docker image
        run: |
          docker build \
            -t acidaos-core:${{ gitea.sha }} \
            -t acidaos-core:latest \
            .

      - name: Push para registry
        run: |
          docker tag acidaos-core:latest \
            registry.descomplicar.pt/acidaos/core:latest
          docker push registry.descomplicar.pt/acidaos/core:latest
        env:
          DOCKER_REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}

      - name: Deploy via EasyPanel API
        run: |
          curl -X POST \
            "https://easypanel.descomplicar.pt/api/deploy" \
            -H "Authorization: Bearer ${{ secrets.EASYPANEL_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d '{
              "projectName": "descomplicar",
              "serviceName": "acidaos-core",
              "image": "registry.descomplicar.pt/acidaos/core:latest"
            }'

      - name: Verificar health
        run: |
          sleep 10
          curl -f http://acidaos-core.descomplicar.pt/health || exit 1

3. Dashboard Next.js — CI Pipeline

Ficheiro: .gitea/workflows/ci.yml (no repo acidaos-dashboard)

name: AcidaOS Dashboard CI

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  lint-typecheck:
    name: Lint e TypeCheck
    runs-on: [self-hosted, linux, node]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'pnpm