CI: cache, tempo limite e nova tentativa em todos os passos de apt
O passo de ferramentas das imagens de teste levou 13 minutos num dia de espelho lento (803 s no último run da main), como o do Tauri. scripts/apt-install.sh vira genérico (pasta de cache e pacotes por argumento) e passa a servir aos dois. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
17b0e89e03
commit
5b6346d575
4 files changed
+44
-37
No files matched your search
@@ -42,11 +42,16 @@ jobs:
|
|||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v7
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
- uses: Swatinem/rust-cache@v2
|
- 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)
|
- name: Ferramentas para imagens de teste (Linux)
|
||||||
if: runner.os == 'Linux'
|
if: runner.os == 'Linux'
|
||||||
run: |
|
timeout-minutes: 25
|
||||||
sudo apt-get update
|
run: scripts/apt-install.sh ~/apt-cache-tools mtools dosfstools exfatprogs ntfs-3g e2fsprogs xfsprogs imagemagick zip
|
||||||
sudo apt-get install -y mtools dosfstools exfatprogs ntfs-3g e2fsprogs xfsprogs imagemagick zip
|
|
||||||
- name: Cache das imagens de referência
|
- name: Cache das imagens de referência
|
||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
with:
|
||||||
@@ -89,10 +94,10 @@ jobs:
|
|||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
with:
|
||||||
path: ~/apt-cache
|
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
|
- name: Dependências do Tauri
|
||||||
timeout-minutes: 25
|
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
|
- 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: 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
|
- run: cargo check --manifest-path apps/gui/src-tauri/Cargo.toml
|
||||||
|
|||||||
@@ -111,11 +111,11 @@ jobs:
|
|||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
with:
|
||||||
path: ~/apt-cache
|
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)
|
- name: Dependências do Tauri (Linux)
|
||||||
if: runner.os == 'Linux'
|
if: runner.os == 'Linux'
|
||||||
timeout-minutes: 25
|
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
|
- 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: 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
|
- uses: tauri-apps/tauri-action@v1
|
||||||
|
|||||||
Executable
+32
@@ -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 <pasta-do-cache> <pacote>...
|
||||||
|
set -euo pipefail
|
||||||
|
[ $# -ge 2 ] || { echo "uso: $0 <pasta-do-cache> <pacote>..." >&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
|
||||||
@@ -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
|
|
||||||
Reference in new issue
Block a user