Skip to content

Build Release

Build Release #44

Workflow file for this run

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_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_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
WSLENV: ERLANG_VERSION:ERLANG_TAR_URL:ERLANG_SOURCE_DIR:RABBITMQ_VERSION:RABBITMQ_ZIP_URL
defaults:
run:
shell: wsl-bash {0}
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
shell: pwsh
run: |
python -m pip install poetry
- uses: Vampire/[email protected]
with:
distribution: Ubuntu-18.04
- name: Install WSL dependencies
run: apt update && apt install -y g++-mingw-w64 gcc-mingw-w64 make autoconf unzip
- name: Install Poetry Dependencies
shell: pwsh
run: |
poetry install
- name: Install openssl
shell: cmd
run: |
choco install openssl --version=3.1.1
IF EXIST "c:\\Program Files\\OpenSSL-Win64" (move "c:\\Program Files\\OpenSSL-Win64" "c:\\OpenSSL-Win64") ELSE (move "c:\\Program Files\\OpenSSL" "c:\\OpenSSL-Win64")
- 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`
export MAKEFLAGS=-j$(($(nproc) + 2))
export ERLC_USE_SERVER=true
export ERTS_SKIP_DEPEND=true
eval `./otp_build env_win32 x64`
./otp_build configure
./otp_build boot -a
./otp_build release -a
cp -r bin release/win32/
cd release/win32/bin
rm -rf win32
rm -f no_dot_erlang.script start.script start_clean.script start_sasl.script
ln -s erl.exe werl.exe
- name: Verify Erlang Build
run: |
cd $ERLANG_SOURCE_DIR
cd release
ls -lA
cd win32
ls -lA
- name: Download RabbitMQ Binaries
run: |
curl -L -o rabbitmq.zip $RABBITMQ_ZIP_URL
unzip rabbitmq.zip
rm -f rabbitmq.zip
- name: Move Binaries into External
run: |
mkdir -p external/rabbitmq_server
mkdir -p external/erlang
mv $ERLANG_SOURCE_DIR/release/win32/* external/erlang
mv rabbitmq_server-$RABBITMQ_VERSION/* external/rabbitmq_server
cd external/erlang
rm -f Install.exe
rm -f Install.ini
- name: Build and Package Release
shell: pwsh
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: |
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-windows.zip