ci: esteira para os runners do Gitea, changelog e instalador pelo Gitea
Release / Plano (este commit já foi validado?) (push) Successful in 4s
CI / Trivy (dependências, segredos e configuração) (push) Successful in 9s
CI / Código e scripts (push) Successful in 14s
CI / Pacote .deb (push) Failing after 3s
Release / ci (push) Failing after 18s
Release / Publica a release (push) Skipped
Release / Plano (este commit já foi validado?) (push) Successful in 4s
CI / Trivy (dependências, segredos e configuração) (push) Successful in 9s
CI / Código e scripts (push) Successful in 14s
CI / Pacote .deb (push) Failing after 3s
Release / ci (push) Failing after 18s
Release / Publica a release (push) Skipped
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
024f7a7387
commit
d14df4e32c
10 files changed
+296
-137
No files matched your search
@@ -0,0 +1,69 @@
|
||||
name: CI
|
||||
|
||||
# Na main não roda por push: o release.yml é quem o chama, e uma vez só por
|
||||
# commit. Sem gatilho de pull_request: o push da branch já valida o mesmo commit,
|
||||
# e os dois juntos rodariam tudo duas vezes (o repositório não recebe PR de fork).
|
||||
on:
|
||||
push:
|
||||
branches-ignore: [main]
|
||||
paths-ignore: ['**.md', 'LICENSE', '.claude/**', '.wolf/**', 'scripts/release-notes.sh']
|
||||
schedule:
|
||||
- cron: '0 9 * * 1' # toda segunda: reavalia com a base de vulnerabilidades nova
|
||||
workflow_call:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: ci-${{ gitea.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
verificar:
|
||||
name: Código e scripts
|
||||
runs-on: ubuntu-24.04-arm
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Sintaxe e shellcheck
|
||||
run: |
|
||||
python3 -m py_compile copiado.py
|
||||
command -v shellcheck >/dev/null || { apt-get update -qq && apt-get install -y -qq shellcheck; }
|
||||
shellcheck instalar.sh desinstalar.sh empacotamento/gerar-deb.sh scripts/*.sh
|
||||
|
||||
# Trivy roda pela imagem oficial: o trivy-action clona o repositório do Trivy
|
||||
# do mesmo servidor do workflow, que aqui é o Gitea. O workspace do job não é
|
||||
# visível ao daemon, então os arquivos entram no container com `docker cp`.
|
||||
seguranca:
|
||||
name: Trivy (dependências, segredos e configuração)
|
||||
runs-on: ubuntu-24.04-arm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: |
|
||||
cid=$(docker create --network host -v trivy-cache:/root/.cache/ -w /src aquasec/trivy:0.70.0 \
|
||||
fs --scanners vuln,secret,misconfig --severity HIGH,CRITICAL --exit-code 1 .)
|
||||
docker cp . "$cid:/src"
|
||||
docker start -a "$cid"
|
||||
status=$(docker inspect -f '{{.State.ExitCode}}' "$cid")
|
||||
docker rm "$cid" >/dev/null
|
||||
exit "$status"
|
||||
|
||||
pacote:
|
||||
name: Pacote .deb
|
||||
needs: [verificar, seguranca]
|
||||
runs-on: ubuntu-24.04-arm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Gera o .deb
|
||||
run: |
|
||||
empacotamento/gerar-deb.sh "0.0.0~ci"
|
||||
(cd dist && sha256sum copiado_all.deb > SHA256SUMS)
|
||||
# Confere o conteúdo sem instalar: instalar puxaria python3-gi e o GTK só
|
||||
# para provar que os arquivos estão no lugar.
|
||||
- name: Confere o conteúdo do pacote
|
||||
run: |
|
||||
dpkg-deb -I dist/copiado_all.deb
|
||||
mkdir conteudo && dpkg-deb -x dist/copiado_all.deb conteudo
|
||||
test -x conteudo/usr/bin/copiado
|
||||
test -f conteudo/etc/xdg/autostart/copiado.desktop
|
||||
python3 -m py_compile conteudo/usr/bin/copiado
|
||||
@@ -0,0 +1,64 @@
|
||||
name: Release
|
||||
|
||||
# Na main valida o commit (chamando o ci.yml). Numa tag v*, gera o .deb com a
|
||||
# versão da tag e publica a release no Gitea com o pacote, o SHA256SUMS e as
|
||||
# notas da seção do CHANGELOG.md. Se o commit da tag já passou na main, a suíte
|
||||
# não roda de novo.
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths-ignore: ['**.md', 'LICENSE', '.claude/**', '.wolf/**']
|
||||
tags: ['v*']
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: release
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
plano:
|
||||
name: Plano (este commit já foi validado?)
|
||||
runs-on: ubuntu-24.04-arm
|
||||
outputs:
|
||||
reuse: ${{ steps.plano.outputs.reuse }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- id: plano
|
||||
run: scripts/plano-ci.sh "${{ gitea.server_url }}" "${{ gitea.repository }}" "${{ gitea.sha }}" "${{ gitea.token }}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
ci:
|
||||
needs: plano
|
||||
if: ${{ needs.plano.outputs.reuse != 'true' }}
|
||||
uses: ./.gitea/workflows/ci.yml
|
||||
|
||||
release:
|
||||
name: Publica a release
|
||||
needs: [plano, ci]
|
||||
# O ci é pulado, e não bem-sucedido, quando o commit já foi validado.
|
||||
if: ${{ !cancelled() && needs.plano.result == 'success' && (needs.ci.result == 'success' || needs.plano.outputs.reuse == 'true') && startsWith(gitea.ref, 'refs/tags/v') }}
|
||||
runs-on: ubuntu-24.04-arm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Pacote
|
||||
run: |
|
||||
empacotamento/gerar-deb.sh "${GITEA_REF_NAME#v}"
|
||||
(cd dist && sha256sum copiado_all.deb > SHA256SUMS)
|
||||
env:
|
||||
GITEA_REF_NAME: ${{ gitea.ref_name }}
|
||||
- name: Release
|
||||
env:
|
||||
TAG: ${{ gitea.ref_name }}
|
||||
TOKEN: ${{ gitea.token }}
|
||||
API: ${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}
|
||||
run: |
|
||||
scripts/release-notes.sh "$TAG" > notes.md
|
||||
jq -n --arg tag "$TAG" --arg name "Copiado ${TAG#v}" --rawfile body notes.md \
|
||||
'{tag_name:$tag, name:$name, body:$body, prerelease:false}' > release.json
|
||||
id=$(curl -fsS -X POST "$API/releases" -H "Authorization: token $TOKEN" \
|
||||
-H 'Content-Type: application/json' -d @release.json | jq -r .id)
|
||||
for f in dist/copiado_all.deb dist/SHA256SUMS; do
|
||||
curl -fsS -X POST "$API/releases/$id/assets?name=$(basename "$f")" \
|
||||
-H "Authorization: token $TOKEN" -F "attachment=@$f" >/dev/null
|
||||
done
|
||||
Reference in new issue
Block a user