diff --git a/.github/workflows/ubunto_matrix_workflow.yml b/.github/workflows/build.yml similarity index 77% rename from .github/workflows/ubunto_matrix_workflow.yml rename to .github/workflows/build.yml index fad14d8..47a076d 100644 --- a/.github/workflows/ubunto_matrix_workflow.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,23 @@ -name: Erlang CI on Ubuntu +name: "[Build & Test] Status" + +on: + push: + branches: [ "main" ] + paths: + - .github/workflows/** + - apps/** + - config/** + - rebar.lock + - rebar.config + pull_request: + branches: [ "main" ] + paths: + - .github/workflows/** + - apps/** + - config/** + - rebar.lock + - rebar.config -on: [push, pull_request] permissions: contents: read # Necessário para actions/checkout @@ -9,7 +26,7 @@ jobs: build: # Nome do job customizado para exibição mais clara no GitHub Actions UI name: OTP ${{ matrix.otp }} Rebar3 ${{ matrix.rebar3 }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest strategy: # Garante que todos os jobs na matriz rodem, mesmo que um falhe. fail-fast: true @@ -17,30 +34,8 @@ jobs: # Define as combinações específicas de OTP e Rebar3 que devem ser executadas. # Adicione aqui apenas as versões que você sabe que são compatíveis. include: - # rebar3 3.24.0 é compatível com OTP 25-27 - - otp: '25.3.2.21' - rebar3: '3.24.0' - - otp: '26.2.5.12' - rebar3: '3.24.0' - - otp: '27.3.4' - rebar3: '3.24.0' - # rebar3 3.25.0 é compatível com OTP 26-28 - - otp: '26.2.5.12' - rebar3: '3.25.0' - - otp: '27.3.4' + - otp: '28' rebar3: '3.25.0' - - otp: '28.0' - rebar3: '3.25.0' - # Adicionadas versões compatíveis para OTP 24.3.4.17 - # rebar3 3.21.0, 3.20.0 e 3.19.0 são compatíveis com OTP 24 - - otp: '24.3.4.17' - rebar3: '3.21.0' - - otp: '24.3.4.17' - rebar3: '3.20.0' - - otp: '24.3.4.17' - rebar3: '3.19.0' - #env: - # A versão do rebar3 agora é definida por cada par na matriz 'include'. steps: - name: Checkout code @@ -83,9 +78,6 @@ jobs: - name: Compile run: rebar3 compile - - name: Run Dialyzer - run: rebar3 dialyzer - - name: Run EUnit tests with coverage run: rebar3 eunit --cover diff --git a/.github/workflows/dialyzer.yml b/.github/workflows/dialyzer.yml new file mode 100644 index 0000000..e744294 --- /dev/null +++ b/.github/workflows/dialyzer.yml @@ -0,0 +1,81 @@ +name: "[Dialyzer] Status" + +on: + push: + branches: [ "main" ] + paths: + - .github/workflows/** + - apps/** + - config/** + - rebar.lock + - rebar.config + pull_request: + branches: [ "main" ] + paths: + - .github/workflows/** + - apps/** + - config/** + - rebar.lock + - rebar.config + +permissions: + contents: read # Necessário para actions/checkout + +jobs: + build: + # Nome do job customizado para exibição mais clara no GitHub Actions UI + name: OTP ${{ matrix.otp }} Rebar3 ${{ matrix.rebar3 }} + runs-on: ubuntu-latest + strategy: + # Garante que todos os jobs na matriz rodem, mesmo que um falhe. + fail-fast: true + matrix: + # Define as combinações específicas de OTP e Rebar3 que devem ser executadas. + # Adicione aqui apenas as versões que você sabe que são compatíveis. + include: + - otp: '28.0' + rebar3: '3.25.0' + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up BEAM + uses: erlef/setup-beam@v1 + id: setup-beam + with: + otp-version: ${{ matrix.otp }} + # Agora usa a versão do rebar3 da matriz + rebar3-version: ${{ matrix.rebar3 }} + + - name: Restore Hex package cache + uses: actions/cache@v4 + id: hex-cache + with: + path: | + ~/.cache/rebar3/hex + ~/.hex + key: ${{ runner.os }}-hex-${{ steps.setup-beam.outputs.otp-version }}-${{ hashFiles('**/rebar.lock') }} + restore-keys: | + ${{ runner.os }}-hex-${{ steps.setup-beam.outputs.otp-version }}- + + - name: Restore Dialyzer PLT cache + uses: actions/cache@v4 + id: plt-cache + with: + path: | + ~/.cache/rebar3/plt_*.ets + _build/default/rebar3_*.plt + key: ${{ runner.os }}-plt-${{ steps.setup-beam.outputs.otp-version }}-${{ hashFiles('**/rebar.lock', '**/rebar.config') }} + restore-keys: | + ${{ runner.os }}-plt-${{ steps.setup-beam.outputs.otp-version }}- + + - name: Install Dependencies + if: steps.hex-cache.outputs.cache-hit != 'true' + run: rebar3 deps + + - name: Compile + run: rebar3 compile + + - name: Run Dialyzer + run: rebar3 dialyzer diff --git a/.github/workflows/opensuse_workflow.yml b/.github/workflows/opensuse_workflow.yml deleted file mode 100644 index d621819..0000000 --- a/.github/workflows/opensuse_workflow.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: Erlang CI com OpenSUSE - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-latest - - container: - image: opensuse/tumbleweed:latest - - steps: - - name: Checkout código - uses: actions/checkout@v4 - - - name: Instalar dependências do sistema e Erlang - run: | - zypper refresh - zypper install -y erlang git wget - erl -version - shell: bash - - - name: Instalar Rebar3 - run: | - wget https://github.com/erlang/rebar3/releases/download/3.25.0/rebar3 - chmod +x rebar3 - ./rebar3 local install # Instala o rebar3 em ~/.cache/rebar3/bin - - REBAR3_BIN_DIR="$HOME/.cache/rebar3/bin" - # Define REBAR3_BIN_DIR como uma variável de ambiente para os próximos passos - echo "REBAR3_BIN_DIR=${REBAR3_BIN_DIR}" >> $GITHUB_ENV - - # Exporta o PATH para uso no rebar3 --version deste passo - export PATH="${REBAR3_BIN_DIR}:$PATH" - - echo "Rebar3 bin directory: ${REBAR3_BIN_DIR}" - echo "PATH neste passo (Instalar Rebar3): $PATH" - rebar3 --version - shell: bash - - - name: Compilar projeto - run: | - # Adiciona o diretório do rebar3 ao PATH no início deste passo - export PATH="${REBAR3_BIN_DIR}:$PATH" - echo "PATH atualizado no passo 'Compilar projeto': $PATH" - rebar3 compile - shell: bash - - - name: Rodar testes - id: run_tests # Adiciona um ID para referenciar o resultado do passo - run: | - # Adiciona o diretório do rebar3 ao PATH no início deste passo - export PATH="${REBAR3_BIN_DIR}:$PATH" - echo "PATH atualizado no passo 'Rodar testes': $PATH" - # Executa os testes com DIAGNOSTIC=1 para obter mais informações em caso de erro - DIAGNOSTIC=1 rebar3 do eunit, ct - shell: bash - - - name: Upload rebar3 crashdump (se houver falha nos testes) - # Este passo só será executado se o passo 'Rodar testes' falhar - if: steps.run_tests.outcome == 'failure' - uses: actions/upload-artifact@v4 - with: - name: rebar3-crashdump - # O rebar3.crashdump geralmente é criado no diretório raiz do projeto - # ou no diretório _build. Verifique a saída do rebar3 se não encontrar. - path: | - rebar3.crashdump - _build/default/rebar3.crashdump - _build/test/rebar3.crashdump - if-no-files-found: ignore # Não falhar o workflow se o arquivo não for encontrado \ No newline at end of file diff --git a/README.md b/README.md index fdb9f5c..99d2034 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # RPC Server +[![[Build & Test] Status](https://github.com/Erlang-Brasil/rpc_server/actions/workflows/build.yml/badge.svg)](https://github.com/Erlang-Brasil/rpc_server/actions/workflows/build.yml) +[![[Dialyzer] Status](https://github.com/Erlang-Brasil/rpc_server/actions/workflows/dialyzer.yml/badge.svg)](https://github.com/Erlang-Brasil/rpc_server/actions/workflows/dialyzer.yml) + Servidor RPC TCP altamente concorrente em Erlang/OTP, composto por dois apps: `rpc_server_http` (conexões TCP) e `rpc_server_shell` (execução de comandos e sessões persistentes). ## Estrutura do projeto @@ -153,4 +156,4 @@ rebar3 ct ## Licença -MIT. Veja `LICENSE.md`. \ No newline at end of file +MIT. Veja `LICENSE.md`. diff --git a/apps/rpc_server_shell/src/rpc_server_shell_manager_sup.erl b/apps/rpc_server_shell/src/rpc_server_shell_manager_sup.erl index af0cba9..bd58339 100644 --- a/apps/rpc_server_shell/src/rpc_server_shell_manager_sup.erl +++ b/apps/rpc_server_shell/src/rpc_server_shell_manager_sup.erl @@ -72,4 +72,4 @@ start_shell_remote(ConnectionPid, Meta) -> {error, Reason} end. - \ No newline at end of file +