Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
mur4i committed Dec 21, 2024
2 parents 8fbd002 + 22e6097 commit 48ffacf
Show file tree
Hide file tree
Showing 4 changed files with 356 additions and 2 deletions.
179 changes: 179 additions & 0 deletions .github/workflows/generate-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
name: Build and Release

on:
push:
tags:
- "v*.*.*"

permissions:
contents: write
actions: write

jobs:
build_and_release:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get_project_information.outputs.version }}
release_body: ${{ steps.prepare_release_body.outputs.body }}
steps:
- name: Checkout code
uses: actions/checkout@v4

# - name: Set up Node.js
# uses: actions/setup-node@v4
# with:
# node-version: "16"

# - name: Install dependencies
# working-directory: ./src
# run: |
# sudo apt install -y jq
# npm install

# - name: Build project
# working-directory: ./src
# run: |
# npm run build
# if [ $? -ne 0 ]; then
# echo "Erro na compilação"
# exit 1
# fi

- name: Get commit messages, version, and repository description
id: get_project_information
run: |
LAST_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
CURRENT_TAG="${GITHUB_REF#refs/tags/}"
if [ -n "$LAST_TAG" ]; then
COMMITS=$(git log $LAST_TAG..$GITHUB_SHA --oneline --pretty=format:"%h %s")
else
echo "Nenhuma tag anterior encontrada. Coletando todos os commits até a tag atual."
COMMITS=$(git log --oneline --pretty=format:"%h %s")
fi
if [ -z "$COMMITS" ]; then
echo "Nenhuma mudança significativa desde a última release." > ./release_body.txt
else
echo "$COMMITS" > ./release_body.txt
fi
echo "version=$CURRENT_TAG" >> $GITHUB_OUTPUT
- name: Prepare release body
id: prepare_release_body
run: |
if [ -f release_body.txt ]; then
RELEASE_NOTES=$(head -n 1900 release_body.txt)
echo "body=$RELEASE_NOTES" >> $GITHUB_OUTPUT
else
echo "Arquivo release_body.txt não encontrado!"
echo "body=Nenhuma nota de release disponível." >> $GITHUB_OUTPUT
fi
- name: Update manifest data
run: |
if [ -f fxmanifest.lua ]; then
REPO_DESCRIPTION=$(curl -s https://api.github.com/repos/${{ github.repository }} | jq -r .description)
sed -i "s/MRIQBOX_VERSION/${{ steps.get_project_information.outputs.version }}/g" fxmanifest.lua
else
echo "Arquivo fxmanifest.lua não encontrado!"
exit 1
fi
- name: Create ZIP file
run: |
mkdir -p "${{ github.event.repository.name }}"
rsync -av \
--exclude='src/' \
--exclude='.github/' \
--exclude='.git/' \
--exclude='*.txt' \
--exclude='*.lock' \
--exclude='.gitignore' \
--exclude='.editorconfig' \
--exclude='*.sh' \
--exclude='*.bat' \
--exclude='${{ github.event.repository.name }}' \
./ "${{ github.event.repository.name }}/"
zip -r --symlinks "${{ github.event.repository.name }}.zip" "${{ github.event.repository.name }}"
- name: Generate Release
uses: comnoco/create-release-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
id: release
with:
tag_name: "${{ steps.get_project_information.outputs.version }}"
release_name: "${{ steps.get_project_information.outputs.version }}"
body_path: release_body.txt
draft: false
prerelease: false

- name: Upload artifacts
uses: shogo82148/[email protected]
with:
upload_url: ${{ steps.release.outputs.upload_url }}
asset_path: ${{ github.event.repository.name }}.zip

post_to_discord:
needs: build_and_release
runs-on: ubuntu-latest
steps:
- name: Post to Discord (with embed)
env:
DISCORD_WEBHOOK_URL: ${{ secrets.UPDATE_DISCORD_WEBHOOK }}
RELEASE_URL: https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}
RELEASE_TAG: ${{ github.ref_name }}
RELEASE_AUTHOR: ${{ github.actor }}
RELEASE_BODY: ${{ needs.build_and_release.outputs.release_body }}
run: |
REPO_DESCRIPTION=$(curl -s https://api.github.com/repos/${{ github.repository }} | jq -r .description)
EMBED_DATA='{
"embeds": [{
"author": {
"name": "MRI QBOX - Updates",
"icon_url": "${{ secrets.LOGO_MRIQBOX_URL }}"
},
"title": "[${{ github.event.repository.name }}] Nova versão disponível: '"${RELEASE_TAG}"'",
"url": "'"${RELEASE_URL}"'",
"description": "'"${REPO_DESCRIPTION}"'",
"fields": [{
"name": "O que há de novo?",
"value": "'"${RELEASE_BODY}"'"
},
{
"name": "Veja todas as mudanças",
"value": "[Veja todas as mudanças aqui](https://github.com/${{ github.repository }}/commits/${{ github.ref_name }})"
},
{
"name": "Precisa de ajuda?",
"value": "[Participe da comunidade](${{ secrets.INVITE_DISCORD_URL}})",
"inline": true
},
{
"name": "Documentação",
"value": "[Acesse aqui](${{ secrets.DOCS_MRIQBOX_URL }})",
"inline": true
}],
"image": {
"url": "${{ secrets.RESOURCE_MRIQBOX_URL }}"
},
"color": 4243543,
"footer": {
"text": "Realizado por: '"${RELEASE_AUTHOR}"'",
"icon_url": "${{ secrets.LOGO_MRIQBOX_URL }}"
},
"timestamp": "'"$(date --utc +%Y-%m-%dT%H:%M:%SZ)"'"
}]
}'
if [ -z "$DISCORD_WEBHOOK_URL" ] || [ -z "$RELEASE_URL" ] || [ -z "$RELEASE_TAG" ]; then
echo "Algumas variáveis obrigatórias estão ausentes. Não será possível enviar o webhook."
exit 1
fi
curl -H "Content-Type: application/json" \
-d "$EMBED_DATA" \
$DISCORD_WEBHOOK_URL
4 changes: 2 additions & 2 deletions fxmanifest.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ fx_version "cerulean"
game "gta5"

author "StevoScripts | steve"
description "Citizenship Exam System for preventing trolls!"
version "1.2.0"
description "REPO_DESCRIPTION"
version "MRIQBOX_VERSION"

shared_scripts {
'@ox_lib/init.lua',
Expand Down
93 changes: 93 additions & 0 deletions generate_release.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
@echo off
setlocal enabledelayedexpansion

git fetch --all --tags

:: Função para encontrar a branch principal automaticamente (main ou master)
set "main_branch="
call :get_main_branch
if "%main_branch%"=="" (
echo Erro: Nao foi possivel detectar a branch principal. Certifique-se de que voce esta no diretorio correto do repositorio Git.
exit /b 1
)

echo Branch principal detectada: %main_branch%

:: Função para obter a última tag e sugerir a próxima versão
set "last_tag="
call :get_last_tag
if "%last_tag%"=="" (
echo Nenhuma tag encontrada. Sugerindo v1.0.0 como primeira tag.
set "next_version=v1.0.0"
) else (
for /f "tokens=1-3 delims=." %%a in ("%last_tag:v=%") do (
set /a patch=%%c + 1
set "next_version=v%%a.%%b.!patch!"
)
)

echo Ultima versao: %last_tag%

:: Solicita ao usuário a versão ou usa a sugestão
set /p "tag_version=Digite a versao da tag (%next_version%): "
if "%tag_version%"=="" set "tag_version=%next_version%"

:: Captura do cancelamento
call :check_cancel

echo Criando tag %tag_version% na branch '%main_branch%' e enviando para o GitHub...

:: Cria a tag
git tag "%tag_version%" "%main_branch%"
if errorlevel 1 (
echo Erro: Falha ao criar a tag %tag_version%. Verifique se a tag ja existe ou se voce tem permissoes adequadas.
exit /b 1
)

:: Envia a tag para o repositório
git push origin "%tag_version%"
if errorlevel 1 (
echo Erro: Falha ao enviar a tag %tag_version% para o GitHub. Verifique sua conexao e permissoes.
exit /b 1
)

echo Tag %tag_version% criada e enviada com sucesso a partir da branch '%main_branch%'!
goto :eof

:get_main_branch
:: Obtém a branch principal (main ou master)
for /f "delims=" %%i in ('git symbolic-ref refs/remotes/origin/HEAD ^| findstr /r /v "^$" 2^>nul') do (
set "main_branch=%%i"
)
set "main_branch=%main_branch:refs/remotes/origin/=%"
exit /b

:get_last_tag
:: Obtém a última tag criada no repositório
for /f "delims=" %%i in ('git describe --tags --abbrev=0 2^>nul') do (
set "last_tag=%%i"
)

:: Verificação alternativa caso a última tag não seja encontrada
if "%last_tag%"=="" (
for /f "delims=" %%j in ('git tag --sort=-v:refname ^| findstr /r /v "^$" 2^>nul') do (
set "last_tag=%%j"
goto :eof
)
)


:check_cancel
:: Pergunta ao usuário para confirmar ou cancelar
choice /c SN /n /m "Continuar gerando? S = Sim, N = Nao"
echo ErrorLevel retornado: %errorlevel%

:: Verifique o valor de errorlevel para C ou Y
if %errorlevel%==1 (
echo Continuando com a operacao...
) else if %errorlevel%==2 (
echo Operacao cancelada pelo usuario.
exit
)

exit /b
82 changes: 82 additions & 0 deletions generate_release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#!/bin/bash

git fetch --all --tags

# Função para encontrar a branch principal automaticamente (main ou master)
get_main_branch() {
main_branch=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')

# Verifica se a branch principal foi detectada
if [[ -z "$main_branch" ]]; then
echo "Erro: Nao foi possivel detectar a branch principal. Certifique-se de que voce esta no diretorio correto do repositorio Git."
exit 1
fi

echo "$main_branch"
}

# Função para obter a última tag e sugerir a próxima versão
suggest_next_version() {
if [[ -z "$last_tag" ]]; then
next_version="v1.0.0"
else
# Extrai a versão e sugere a próxima, incrementando o último dígito
IFS='.' read -r major minor patch <<< "${last_tag//v/}"
next_version="v$major.$minor.$((patch + 1))"
fi
echo "$next_version"
}

# Obtém a branch principal
main_branch=$(get_main_branch)
echo "Branch principal detectada: $main_branch"

# Busca a última tag válida no repositório
last_tag=$(git tag --sort=-v:refname | head -n 1)
if [[ -z "$last_tag" ]]; then
echo "Nenhuma tag encontrada. Sugerindo v1.0.0 como primeira tag."
next_version="v1.0.0"
else
next_version=$(suggest_next_version)
fi

echo "Ultima versao: ${last_tag:-Nenhuma}"

# Solicita ao usuário a versão ou usa a sugestão
read -p "Digite a versao da tag ($next_version): " tag_version
tag_version=${tag_version:-$next_version}

# Confirmação para continuar ou cancelar
while true; do
read -p "Deseja continuar criando a tag $tag_version? (S = Sim, N = Não): " confirmacao
case $confirmacao in
[Ss]* )
echo "Continuando com a operação..."
break
;;
[Nn]* )
echo "Operação cancelada pelo usuário."
exit 0
;;
* )
echo "Por favor, responda com 'S' para Sim ou 'N' para Não."
;;
esac
done

# Criando a tag
echo "Criando tag $tag_version na branch '$main_branch' e enviando para o GitHub..."
git tag "$tag_version" "$main_branch"
if [[ $? -ne 0 ]]; then
echo "Erro: Falha ao criar a tag $tag_version. Verifique se a tag ja existe ou se você tem permissões adequadas."
exit 1
fi

# Envia a tag para o repositório
git push origin "$tag_version"
if [[ $? -ne 0 ]]; then
echo "Erro: Falha ao enviar a tag $tag_version para o GitHub. Verifique sua conexão e permissões."
exit 1
fi

echo "Tag $tag_version criada e enviada com sucesso a partir da branch '$main_branch'!"

0 comments on commit 48ffacf

Please sign in to comment.