diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1531db2..6e35b82 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,11 +42,16 @@ jobs: - uses: actions/checkout@v7 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 + - name: Cache dos pacotes das ferramentas de teste (.deb) + if: runner.os == 'Linux' + uses: actions/cache@v6 + with: + path: ~/apt-cache-tools + key: apt-tools-${{ runner.os }}-${{ runner.arch }}-${{ env.ImageVersion }}-${{ hashFiles('scripts/apt-install.sh') }} - name: Ferramentas para imagens de teste (Linux) if: runner.os == 'Linux' - run: | - sudo apt-get update - sudo apt-get install -y mtools dosfstools exfatprogs ntfs-3g e2fsprogs xfsprogs imagemagick zip + timeout-minutes: 25 + run: scripts/apt-install.sh ~/apt-cache-tools mtools dosfstools exfatprogs ntfs-3g e2fsprogs xfsprogs imagemagick zip - name: Cache das imagens de referência uses: actions/cache@v6 with: @@ -89,10 +94,10 @@ jobs: uses: actions/cache@v6 with: path: ~/apt-cache - key: apt-tauri-${{ runner.os }}-${{ runner.arch }}-${{ env.ImageVersion }}-${{ hashFiles('scripts/install-tauri-deps.sh') }} + key: apt-tauri-${{ runner.os }}-${{ runner.arch }}-${{ env.ImageVersion }}-${{ hashFiles('scripts/apt-install.sh') }} - name: Dependências do Tauri timeout-minutes: 25 - run: scripts/install-tauri-deps.sh + run: scripts/apt-install.sh ~/apt-cache libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf - name: Gera os ícones run: npx --yes @tauri-apps/cli@2 icon apps/gui/src-tauri/icons/source.png -o apps/gui/src-tauri/icons - run: cargo check --manifest-path apps/gui/src-tauri/Cargo.toml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 50637c1..2529b4b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -111,11 +111,11 @@ jobs: uses: actions/cache@v6 with: path: ~/apt-cache - key: apt-tauri-${{ runner.os }}-${{ runner.arch }}-${{ env.ImageVersion }}-${{ hashFiles('scripts/install-tauri-deps.sh') }} + key: apt-tauri-${{ runner.os }}-${{ runner.arch }}-${{ env.ImageVersion }}-${{ hashFiles('scripts/apt-install.sh') }} - name: Dependências do Tauri (Linux) if: runner.os == 'Linux' timeout-minutes: 25 - run: scripts/install-tauri-deps.sh + run: scripts/apt-install.sh ~/apt-cache libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf - name: Gera os ícones run: npx --yes @tauri-apps/cli@2 icon apps/gui/src-tauri/icons/source.png -o apps/gui/src-tauri/icons - uses: tauri-apps/tauri-action@v1 diff --git a/scripts/apt-install.sh b/scripts/apt-install.sh new file mode 100755 index 0000000..74c1762 --- /dev/null +++ b/scripts/apt-install.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# Instala pacotes do apt no CI sem depender do espelho estar rápido: usa os .deb em cache quando +# existem e, se o apt travar ou falhar, tenta de novo com tempo limite por tentativa. +# +# Os passos de apt do CI já levaram de 13 a 28 minutos num dia de espelho lento, contra uns 35 s +# no normal. O cache evita o download; o tempo limite evita ficar preso. +# +# Uso: scripts/apt-install.sh ... +set -euo pipefail +[ $# -ge 2 ] || { echo "uso: $0 ..." >&2; exit 2; } +cache="$1"; shift +pkgs=("$@") +mkdir -p "$cache/partial" +opts=(-o "Dir::Cache::archives=$cache" -y) + +# 1) com .deb em cache: instala direto, sem nem atualizar o índice do apt +if ls "$cache"/*.deb >/dev/null 2>&1 && timeout 300 sudo apt-get "${opts[@]}" install "${pkgs[@]}"; then + echo "instalado a partir do cache" + exit 0 +fi + +# 2) sem cache (ou incompleto): atualiza e instala, até 3 tentativas com tempo limite +for tentativa in 1 2 3; do + if timeout 240 sudo apt-get update && timeout 600 sudo apt-get "${opts[@]}" install "${pkgs[@]}"; then + echo "instalado (tentativa $tentativa)" + exit 0 + fi + echo "apt falhou ou passou do tempo (tentativa $tentativa de 3)" >&2 + sleep $((tentativa * 10)) +done +echo "não foi possível instalar: ${pkgs[*]}" >&2 +exit 1 diff --git a/scripts/install-tauri-deps.sh b/scripts/install-tauri-deps.sh deleted file mode 100755 index de865d7..0000000 --- a/scripts/install-tauri-deps.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -# Instala as bibliotecas do Tauri no Linux do CI (WebKitGTK e afins) sem depender do espelho do -# apt estar rápido: usa os .deb em cache quando existem e, se o apt travar ou falhar, tenta de novo. -# -# O passo "Dependências do Tauri" já levou de 22 a 28 minutos num dia de espelho lento, contra -# uns 35 s no normal. Aqui cada tentativa tem tempo limite e o cache evita o download. -# -# Uso: scripts/install-tauri-deps.sh [pasta-do-cache] (padrão: ~/apt-cache) -set -euo pipefail -cache="${1:-$HOME/apt-cache}" -pkgs=(libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf) -mkdir -p "$cache/partial" - -# 1) tudo em cache: instala direto, sem nem atualizar o índice do apt -if ls "$cache"/*.deb >/dev/null 2>&1 && timeout 300 sudo apt-get -o "Dir::Cache::archives=$cache" -y install "${pkgs[@]}"; then - echo "instalado a partir do cache" - exit 0 -fi - -# 2) sem cache (ou incompleto): atualiza e instala, até 3 tentativas com tempo limite -for tentativa in 1 2 3; do - if timeout 240 sudo apt-get update && timeout 600 sudo apt-get -o "Dir::Cache::archives=$cache" -y install "${pkgs[@]}"; then - echo "instalado (tentativa $tentativa)" - exit 0 - fi - echo "apt falhou ou passou do tempo (tentativa $tentativa de 3)" >&2 - sleep $((tentativa * 10)) -done -echo "não foi possível instalar as dependências do Tauri" >&2 -exit 1