Skip to content

Build Release

Build Release #47

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_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