Parece que é possível executar Actions mantendo a compatibilidade entre Github e Gitea

8 min

language: ja bn en es hi pt ru zh-cn zh-tw

Olá, sou incompetente.
O que estou fazendo é principalmente a introdução do Gitea Actions.

Configurando o ambiente de execução do Gitea Actions

O que estou fazendo é quase o mesmo que o seguinte, mas
Gitea Actions está chegando!
A propósito, parece que [actions] está ativado por padrão em app.ini, mesmo que ENABLED=true não seja definido.
Versão no momento da introdução

$ gitea -v
Gitea version 1.22.4 built with GNU Make 4.3, go1.22.9 : bindata, sqlite, sqlite_unlock_notify

A versão do Go instalada com apt no Debian no Hetzner era antiga e recebi um erro ao compilar, então vou instalar a versão mais recente do Go.

wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
exec bash
go version

Nesse momento, eu já havia feito apt remove, mas ainda estava olhando para /usr/bin/go e esqueci de passar o caminho, então configurei o caminho.

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
rm /usr/bin/go
exec bash
go version

Compilando o runner do Gitea Actions

É necessário que ele seja executado como um daemon separado, e docker também é necessário, então vou instalá-lo.

apt install -y make docker.io
service docker status

git clone https://gitea.com/gitea/act_runner
cd act_runner/
make build
mv ./act_runner /usr/local/bin
exec bash

Vinculando com act_runner register

Provavelmente, entendi o motivo pelo qual isso é separado do binário principal do Gitea neste ponto.
Acho que é para separar facilmente o ambiente para executar Gitea Actions em um servidor diferente do servidor que hospeda o próprio Gitea.

# act_runner register
INFO Registering runner, arch=amd64, os=linux, version=v0.2.11+6-g8bc0275. 
INFO Enter the Gitea instance URL (for example, https://gitea.com/): 
https://git.domain.tld/ 
INFO Enter the runner token:                      
Secret key
INFO Enter the runner name (if set empty, use hostname: debian-2gb-hel1-1): 
danzig
INFO Enter the runner labels, leave blank to use the default labels (comma-separated, for example, ubuntu-latest:docker://gitea/runner-images:ubuntu-latest): 

INFO Registering runner, name=danzig, instance=https://git.domain.tld/, labels=[ubuntu-latest:docker://gitea/runner-images:ubuntu-latest ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04 ubuntu-20.04:docker://gitea/runner-images:ubuntu-20.04]. 
DEBU Successfully pinged the Gitea instance server 
INFO Runner registered successfully.              

A propósito, a obtenção do token a ser passado para o Runner é diferente do site mencionado anteriormente e atualmente é
https://git.domain.tld/admin/actions/runners
que estava.
É trivial, mas nomeei o runner de danzig em homenagem ao vocalista do Misfits.
É divertido imaginar Glenn Danzig fazendo o trabalho de compilação nos bastidores.

Parece que preciso instalar o apparmor

Aparentemente, os módulos necessários estão faltando.
Parece que são necessários Linux Security Modules diferentes do SE Linux.
Image
Então, vou instalá-lo.

apt install -y apparmor apparmor-utils

Então, sobre o que fazer com o binário executável para o daemon do act_runner, por enquanto, durante o período de testes, eu o coloquei em rc.local para que ele apenas inicie.
A razão é que se eu o colocasse no Systemd ou Supervisord desde o início, seria problemático verificar quando o daemon morresse no meio do caminho. Então, se ele morrer de forma limpa, é mais fácil apenas olhar o log de morte do daemon em nohup.out depois, o que o torna mais fácil de encontrar.
Escreva o seguinte em /etc/rc.local

nohup act_runner daemon &

E então reinicie o daemon do Docker.

service docker restart

A propósito, a razão pela qual eu quase não uso systemctl é porque é genérico e pode ser usado da mesma forma em outras distribuições e ambientes BSD.

Editar YAML

Honestamente, não entendo bem para onde actions/checkout@v4 está olhando quando funciona sem ser explícito, mas olhando os logs, parece que o act_runner está corrigindo-o inteligentemente para entender essa sintaxe.
Image
Então, parece que ele está usando ativos diretamente do Github, em vez de algum tipo de ativo espelhado de actions/checkout@v4 que o act_runner possui.

# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go

name: Go

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:

  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: Set up Go
      uses: actions/setup-go@v4
      with:
        go-version: '1.23.3'

    - name: Build
      run: go build -v ./...

    - name: Test
      run: go test -v ./...

No artigo do Qiita, era necessário especificar explicitamente a URL completa para tudo, exceto actions/checkout@v4, então eu especifiquei a URL completa para uses em name: Set up Go. Mas se for como mencionado anteriormente, agora que a versão está mais alta, talvez ele reconheça inteligentemente como um ativo do Github?
Pensei nisso, mas então parece que haveria problemas se houvesse conflito com ativos no Gitea, então especificar a URL completa parece menos problemático.
※Adendo
Aparentemente, owner/repo@ref funciona tanto para Github quanto para Gitea, então posso prosseguir sem pensar muito.

Funcionando com sucesso

Image
Consegui!!!!
Então, é isso por hoje.
Obrigado novamente.