Skip to content

implementando sistema de login #108

implementando sistema de login

implementando sistema de login #108

name: Build & Teste & Deploy
on:
#Este workflow dispara sempre em resposta a um desses 3 eventos
#Porém, o deploy no DockerHub e Fly.io só será feito se for push ou workflow_dispatch para a branch master
#Existem ifs no código controlando isso
workflow_dispatch:
push:
pull_request:
env:
JAVA_VERSAO: '17'
JAVA_DISTRIBUICAO: 'temurin'
NODE_VERSAO: '20'
BACKEND_NOME_DIRETORIO: 'backend'
FRONTEND_NOME_DIRETORIO: 'frontend'
#Define se o deploy no DockerHub e Fly.io será feito
#True se a branch for master E for um push ou um workflow_dispatch
#Essa variável de ambiente é usada por ifs no código
DEVE_PUBLICAR: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/master' }}
jobs:
principal:
name: Teste e Build. Deploy no DockerHub e Fly.io se for pra branch principal.
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
#Pega o diretório de cache do Angular e o armazena em cache
- name: Angular (Cache do diretório .angular/cache)
uses: actions/cache@v3
with:
path: ${{ env.FRONTEND_NOME_DIRETORIO }}/.angular/cache
key: ${{ runner.os }}-angular
- name: Node (Setup)
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSAO }}
cache: 'npm'
cache-dependency-path: ${{ env.FRONTEND_NOME_DIRETORIO }}/package-lock.json
#Instala o Angular e cria os arquvos estáticos do front-end
#Depois joga esses arquivos estáticos no diretório resources/static do Spring
- name: Angular (Build do projeto e adição dos arquivos estáticos ao back-end)
run: cd ${{ env.FRONTEND_NOME_DIRETORIO }} && npm ci && npm install -g @angular/cli && ng config cli.cache.environment all && ng build
&& cp dist/*/* ../${{ env.BACKEND_NOME_DIRETORIO }}/src/main/resources/static
#Prepara a JDK que vai ser usada pelo Maven abaixo para construir a aplicação
- name: Preparação da JDK
uses: actions/setup-java@v3
with:
distribution: ${{ env.JAVA_DISTRIBUICAO }}
java-version: ${{ env.JAVA_VERSAO }}
cache: 'maven'
#Constrói a aplicação com o Maven e passa a localização do .jar do APP para a $GITHUB_ENV
#GITHUB_ENV é uma variável de ambiente especial. Tudo que é passado pra ela estará disponível entre os jobs
#O ideal é deixar tudo mais modularizado, separando o Docker em um outro job e passando pra ele a JDK e o APP
- name: Maven (Criação do .jar da aplicação)
run: mvn package -f ${{ env.BACKEND_NOME_DIRETORIO }}/pom.xml &&
echo "APP_LOCALIZACAO=$(ls ${{ env.BACKEND_NOME_DIRETORIO }}/target/*.jar)" >> $GITHUB_ENV
#Verifica se a JDK que estamos usando tem $JAVA_HOME/lib/security/cacerts sendo um
#link simbólico apontando para um outro diretório do sistema.
#Se tiver, substitui esse link simbólico pelo arquivo original.
- name: Cópia da JDK e de seus certificados digitais
run: |
mkdir jdk && cp -r $JAVA_HOME/* jdk &&
echo "JDK_LOCALIZACAO=jdk" >> $GITHUB_ENV &&
if test -L jdk/lib/security/cacerts ; then
caminho_original=$(realpath $JAVA_HOME/lib/security/cacerts) &&
rm jdk/lib/security/cacerts &&
cp $caminho_original jdk/lib/security &&
ls -l jdk/lib/security/cacerts
fi
- name: Docker Buildx (Configuração - Se for pra branch principal)
if: env.DEVE_PUBLICAR == 'true'
uses: docker/setup-buildx-action@v2.5.0
- name: Docker Hub (Login - Se for pra branch principal)
if: env.DEVE_PUBLICAR == 'true'
uses: docker/login-action@v2.1.0
with:
username: ${{ vars.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Docker (Build e deploy da imagem - Se for pra branch principal)
if: env.DEVE_PUBLICAR == 'true'
uses: docker/build-push-action@v4.0.0
with:
context: .
file: Dockerfile_GHActions
#O Dockerfile_GHActions espera receber um caminho para uma JDK e para o APP, pois ele passará ambos para a imagem
build-args: |
JDK_LOCALIZACAO=${{ env.JDK_LOCALIZACAO }}
APP_LOCALIZACAO=${{ env.APP_LOCALIZACAO }}
push: true
tags: ${{ vars.DOCKERHUB_USER }}/calangodev:latest
- name: Fly.io (Setup - Se for pra branch principal)
if: env.DEVE_PUBLICAR == 'true'
uses: superfly/flyctl-actions/setup-flyctl@master
- name: Fly.io (Deploy - Se for pra branch principal)
if: env.DEVE_PUBLICAR == 'true'
run: flyctl deploy
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}