Build Release #47
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Release | |
on: | |
workflow_dispatch: | |
inputs: | |
erlang_version: | |
description: Erlang Version | |
required: true | |
rabbitmq_version: | |
description: RabbitMQ Version | |
required: true | |
build_windows: | |
description: Build Windows Release | |
required: false | |
default: true | |
type: boolean | |
build_linux: | |
description: Build Linux Release | |
required: false | |
default: true | |
type: boolean | |
permissions: | |
contents: write | |
jobs: | |
build-linux-release: | |
if: inputs.build_linux | |
runs-on: ubuntu-latest | |
env: | |
ERLANG_VERSION: ${{ github.event.inputs.erlang_version }} | |
ERLANG_TAR_URL: https://github.com/erlang/otp/releases/download/OTP-${{ github.event.inputs.erlang_version }}/otp_src_${{ github.event.inputs.erlang_version }}.tar.gz | |
ERLANG_SOURCE_DIR: otp_src_${{ github.event.inputs.erlang_version }} | |
RABBITMQ_VERSION: ${{ github.event.inputs.rabbitmq_version }} | |
RABBITMQ_TAR_URL: https://github.com/rabbitmq/rabbitmq-server/releases/download/v${{ github.event.inputs.rabbitmq_version }}/rabbitmq-server-generic-unix-${{ github.event.inputs.rabbitmq_version }}.tar.xz | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- name: Install Poetry | |
run: | | |
pip install poetry | |
- name: Install Erlang Dependencies | |
run: | | |
sudo apt update | |
sudo apt upgrade -y | |
# Github's runner environment already has tar, make, and gcc installed | |
# Install perl | |
sudo apt install -y perl | |
# Instal ncurses headers | |
sudo apt-get install -y ncurses-dev | |
# Install OpenSSL and Development Headers | |
sudo apt install -y openssl libssl-dev | |
- name: Install Poetry Dependencies | |
run: | | |
poetry install | |
- name: Verify Dependencies | |
run: | | |
tar --version | |
make --version | |
gcc --version | |
perl --version | |
openssl version | |
- name: Download Erlang Source | |
run: | | |
curl -L -o otp.tar.gz $ERLANG_TAR_URL | |
tar -zxf otp.tar.gz | |
rm -f otp.tar.gz | |
- name: Compile Erlang | |
run: | | |
cd $ERLANG_SOURCE_DIR | |
export ERL_TOP=`pwd` | |
./configure --prefix=$(readlink -f "../erlang") | |
make | |
- name: Install Erlang in folder | |
run: | | |
cd $ERLANG_SOURCE_DIR | |
export ERL_TOP=`pwd` | |
make install | |
cd .. | |
rm -rf $ERLANG_SOURCE_DIR | |
- name: Download RabbitMQ Binaries | |
run: | | |
curl -L -o rabbitmq.tar.xz $RABBITMQ_TAR_URL | |
tar -xvf rabbitmq.tar.xz | |
rm -f rabbitmq.tar.xz | |
- name: Move Binaries into External | |
run: | | |
mkdir -p external/rabbitmq_server | |
mv erlang external/ | |
mv rabbitmq_server-$RABBITMQ_VERSION/* external/rabbitmq_server | |
rm -rf rabbitmq_server-$RABBITMQ_VERSION | |
- name: Build and Package Release | |
run: | | |
poetry run pyinstaller rabbitmq.spec | |
mv dist/rabbitmq ./rabbitmq | |
tar -czf rabbitmq-linux.tar.gz ./rabbitmq | |
rm -rf ./rabbitmq | |
rm -rf dist | |
- name: Check and Create Tag | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
if ! curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${{ github.repository }}/git/matching-refs/tags/$RABBITMQ_VERSION" | grep -q "$RABBITMQ_VERSION"; then | |
git tag "$RABBITMQ_VERSION" | |
git push origin "$RABBITMQ_VERSION" | |
fi | |
- name: Upload Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
tag_name: ${{ env.RABBITMQ_VERSION }} | |
files: | | |
rabbitmq-linux.tar.gz | |
build-windows-release: | |
if: inputs.build_windows | |
env: | |
ERLANG_VERSION: ${{ github.event.inputs.erlang_version }} | |
ERLANG_ZIP_URL: https://github.com/erlang/otp/releases/download/OTP-${{ github.event.inputs.erlang_version }}/otp_win64_${{ github.event.inputs.erlang_version }}.zip | |
RABBITMQ_VERSION: ${{ github.event.inputs.rabbitmq_version }} | |
RABBITMQ_ZIP_URL: https://github.com/rabbitmq/rabbitmq-server/releases/download/v${{ github.event.inputs.rabbitmq_version }}/rabbitmq-server-windows-${{ github.event.inputs.rabbitmq_version }}.zip | |
runs-on: windows-2022 | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- name: Install Poetry | |
run: | | |
python -m pip install poetry | |
- name: Install Dependencies | |
run: | | |
poetry install | |
- name: Download Erlang's Pre-built binaries | |
run: | | |
Invoke-WebRequest -Uri $env:ERLANG_ZIP_URL -OutFile erlang.zip | |
Expand-Archive -Path erlang.zip -DestinationPath ./erlang | |
Remove-Item -Path erlang.zip | |
- name: Download RabbitMQ Binaries | |
run: | | |
Invoke-WebRequest -Uri $env:RABBITMQ_ZIP_URL -OutFile rabbitmq.zip | |
Expand-Archive -Path rabbitmq.zip -DestinationPath . | |
Remove-Item -Path rabbitmq.zip | |
- name: Move Binaries into External | |
run: | | |
New-Item -ItemType Directory -Path "external/rabbitmq_server" | |
New-Item -ItemType Directory -Path "external/erlang" -Force | |
Move-Item -Path "erlang\*" -Destination "external\erlang" | |
Move-Item -Path "rabbitmq_server-$env:RABBITMQ_VERSION\*" -Destination "external\rabbitmq_server" | |
- name: Build and Package Release | |
run: | | |
poetry run pyinstaller rabbitmq.spec | |
Move-Item -Path 'dist\rabbitmq' -Destination 'rabbitmq' | |
Compress-Archive -Path 'rabbitmq' -DestinationPath 'rabbitmq-windows.zip' | |
Remove-Item -Recurse -Force 'rabbitmq' | |
Remove-Item -Recurse -Force 'dist' | |
- name: Check and Create Tag | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
$GITHUB_TOKEN = $env:GITHUB_TOKEN | |
$RABBITMQ_VERSION = $env:RABBITMQ_VERSION | |
$repository = "${{ github.repository }}" | |
$response = Invoke-RestMethod -Uri "https://api.github.com/repos/$repository/git/matching-refs/tags/$RABBITMQ_VERSION" -Headers @{ Authorization = "token $GITHUB_TOKEN" } -Method Get | |
if (-not ($response | Select-String -Pattern $RABBITMQ_VERSION)) { | |
git tag "$RABBITMQ_VERSION" | |
git push origin "$RABBITMQ_VERSION" | |
} | |
- name: Upload Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
tag_name: ${{ env.RABBITMQ_VERSION }} | |
files: | | |
rabbitmq-windows.zip |