Skip to content

Commit

Permalink
gh workflow refactoring; bump release to 0.99.0
Browse files Browse the repository at this point in the history
  • Loading branch information
erubboli committed Sep 10, 2024
1 parent 410cf38 commit 557d7d1
Show file tree
Hide file tree
Showing 37 changed files with 968 additions and 536 deletions.
2 changes: 2 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# cargo build --all --target=aarch64-unknown-linux-gnu
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
47 changes: 47 additions & 0 deletions .github/workflows/build-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Build Docker

on:
workflow_call:

jobs:
build-docker-images:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install toml
# Install any other dependencies your script might need
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Login to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Determine version
id: version
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
else
echo "VERSION=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
fi
- name: Build and Push Docker images
run: python build-tools/docker/build.py --push --docker-hub-user ${{ secrets.DOCKERHUB_USERNAME }} --version ${{ steps.version.outputs.VERSION }} --latest

env:
DOCKER_BUILDKIT: 1
214 changes: 214 additions & 0 deletions .github/workflows/build-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
name: Build Linux

on:
workflow_call:
inputs:
binary_list:
required: true
type: string

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
arch: [aarch64, x86_64]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Extract version from tag
id: get_version
run: |
VERSION=${GITHUB_REF#refs/tags/}
VERSION=${VERSION#v}
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "Version extracted: $VERSION"
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
targets: ${{ matrix.arch }}-unknown-linux-gnu

- name: Install cross-compilation tools
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
- name: Install dependencies
run: |
sudo apt-get install -y debhelper zip imagemagick
if [ "${{ matrix.arch }}" = "x86_64" ]; then
sudo apt-get install -y rpm
fi
- name: Build
run: |
cargo build --release --target ${{ matrix.arch }}-unknown-linux-gnu
- name: Create Debian package for GUI
run: |
mkdir -p debian-gui/DEBIAN
mkdir -p debian-gui/usr/bin
mkdir -p debian-gui/usr/share/applications
mkdir -p debian-gui/usr/share/icons/hicolor/512x512/apps
mkdir -p debian-gui/usr/share/icons/hicolor/256x256/apps
mkdir -p debian-gui/usr/share/icons/hicolor/128x128/apps
mkdir -p debian-gui/usr/share/icons/hicolor/64x64/apps
cp target/${{ matrix.arch }}-unknown-linux-gnu/release/node-gui debian-gui/usr/bin/
# Copy and convert icon files
cp build-tools/assets/node-gui-icon_512.png debian-gui/usr/share/icons/hicolor/512x512/apps/mintlayer-node-gui.png
convert build-tools/assets/node-gui-icon_512.png -resize 256x256 debian-gui/usr/share/icons/hicolor/256x256/apps/mintlayer-node-gui.png
convert build-tools/assets/node-gui-icon_512.png -resize 128x128 debian-gui/usr/share/icons/hicolor/128x128/apps/mintlayer-node-gui.png
convert build-tools/assets/node-gui-icon_512.png -resize 64x64 debian-gui/usr/share/icons/hicolor/64x64/apps/mintlayer-node-gui.png
# Create .desktop file
cat << EOF > debian-gui/usr/share/applications/mintlayer-node-gui.desktop
[Desktop Entry]
Name=Mintlayer Node GUI
Exec=/usr/bin/node-gui
Icon=mintlayer-node-gui
Type=Application
Categories=Utility;Network;
EOF
cat << EOF > debian-gui/DEBIAN/control
Package: mintlayer-node-gui
Version: ${{ steps.get_version.outputs.VERSION }}
Section: utils
Priority: optional
Architecture: ${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}
Maintainer: Mintlayer <[email protected]>
Description: Mintlayer Node GUI
A graphical user interface for the Mintlayer node.
EOF
dpkg-deb --build debian-gui
mv debian-gui.deb Mintlayer_Node_GUI_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}.deb
- name: Create Debian package for Node (without GUI)
run: |
mkdir -p debian-node/DEBIAN
mkdir -p debian-node/usr/bin
IFS=',' read -ra BINARIES <<< "${{ inputs.binary_list }}"
for binary in "${BINARIES[@]}"; do
cp target/${{ matrix.arch }}-unknown-linux-gnu/release/$binary debian-node/usr/bin/
done
cat << EOF > debian-node/DEBIAN/control
Package: mintlayer-node
Version: ${{ steps.get_version.outputs.VERSION }}
Section: utils
Priority: optional
Architecture: ${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}
Maintainer: Mintlayer <[email protected]>
Description: Mintlayer Node
Mintlayer node and associated tools.
EOF
dpkg-deb --build debian-node
mv debian-node.deb Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}.deb
- name: Create RPM package for GUI
if: matrix.arch == 'x86_64'
run: |
mkdir -p rpm-gui/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
mkdir -p rpm-gui/BUILDROOT/mintlayer-node-gui-${{ steps.get_version.outputs.VERSION }}-1.x86_64
cp -r debian-gui/usr rpm-gui/BUILDROOT/mintlayer-node-gui-${{ steps.get_version.outputs.VERSION }}-1.x86_64/
cat << EOF > rpm-gui/SPECS/mintlayer-node-gui.spec
Name: mintlayer-node-gui
Version: ${{ steps.get_version.outputs.VERSION }}
Release: 1
Summary: Mintlayer Node GUI
License: MIT
BuildArch: x86_64
%description
A graphical user interface for the Mintlayer node.
%files
/usr/bin/node-gui
/usr/share/applications/mintlayer-node-gui.desktop
/usr/share/icons/hicolor/512x512/apps/mintlayer-node-gui.png
/usr/share/icons/hicolor/256x256/apps/mintlayer-node-gui.png
/usr/share/icons/hicolor/128x128/apps/mintlayer-node-gui.png
/usr/share/icons/hicolor/64x64/apps/mintlayer-node-gui.png
%changelog
* $(date "+%a %b %d %Y") Mintlayer <[email protected]> - ${{ steps.get_version.outputs.VERSION }}-1
- Initial RPM release
EOF
rpmbuild -bb --define "_topdir $(pwd)/rpm-gui" --buildroot $(pwd)/rpm-gui/BUILDROOT/mintlayer-node-gui-${{ steps.get_version.outputs.VERSION }}-1.x86_64 rpm-gui/SPECS/mintlayer-node-gui.spec
mv rpm-gui/RPMS/x86_64/mintlayer-node-gui-${{ steps.get_version.outputs.VERSION }}-1.x86_64.rpm Mintlayer_Node_GUI_linux_${{ steps.get_version.outputs.VERSION }}_x86_64.rpm
- name: Create RPM package for Node (without GUI)
if: matrix.arch == 'x86_64'
run: |
mkdir -p rpm-node/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
mkdir -p rpm-node/BUILDROOT/mintlayer-node-${{ steps.get_version.outputs.VERSION }}-1.x86_64
cp -r debian-node/usr rpm-node/BUILDROOT/mintlayer-node-${{ steps.get_version.outputs.VERSION }}-1.x86_64/
cat << EOF > rpm-node/SPECS/mintlayer-node.spec
Name: mintlayer-node
Version: ${{ steps.get_version.outputs.VERSION }}
Release: 1
Summary: Mintlayer Node
License: MIT
BuildArch: x86_64
%description
Mintlayer node and associated tools.
%files
/usr/bin/*
%changelog
* $(date "+%a %b %d %Y") Mintlayer <[email protected]> - ${{ steps.get_version.outputs.VERSION }}-1
- Initial RPM release
EOF
rpmbuild -bb --define "_topdir $(pwd)/rpm-node" --buildroot $(pwd)/rpm-node/BUILDROOT/mintlayer-node-${{ steps.get_version.outputs.VERSION }}-1.x86_64 rpm-node/SPECS/mintlayer-node.spec
mv rpm-node/RPMS/x86_64/mintlayer-node-${{ steps.get_version.outputs.VERSION }}-1.x86_64.rpm Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_x86_64.rpm
- name: Package Mintlayer Node (without GUI) as ZIP
run: |
mkdir -p Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}
IFS=',' read -ra BINARIES <<< "${{ inputs.binary_list }}"
for binary in "${BINARIES[@]}"; do
cp target/${{ matrix.arch }}-unknown-linux-gnu/release/$binary Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}/
done
zip -r Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}.zip Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}
- name: Upload GUI DEB Artifact
uses: actions/upload-artifact@v4
with:
name: Mintlayer_Node_GUI_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}_deb
path: Mintlayer_Node_GUI_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}.deb

- name: Upload Node DEB Artifact (without GUI)
uses: actions/upload-artifact@v4
with:
name: Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}_deb
path: Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch == 'x86_64' && 'amd64' || 'arm64' }}.deb

- name: Upload GUI RPM Artifact
if: matrix.arch == 'x86_64'
uses: actions/upload-artifact@v4
with:
name: Mintlayer_Node_GUI_linux_${{ steps.get_version.outputs.VERSION }}_x86_64_rpm
path: Mintlayer_Node_GUI_linux_${{ steps.get_version.outputs.VERSION }}_x86_64.rpm

- name: Upload Node RPM Artifact (without GUI)
if: matrix.arch == 'x86_64'
uses: actions/upload-artifact@v4
with:
name: Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_x86_64_rpm
path: Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_x86_64.rpm

- name: Upload Node ZIP Artifact (without GUI)
uses: actions/upload-artifact@v4
with:
name: Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}_zip
path: Mintlayer_Node_linux_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}.zip
70 changes: 70 additions & 0 deletions .github/workflows/build-macos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Build macOS

on:
workflow_call:
inputs:
binary_list:
required: true
type: string

jobs:
build:
runs-on: macos-12
strategy:
matrix:
arch: [aarch64, x86_64]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Extract version from tag
id: get_version
run: |
VERSION=${GITHUB_REF#refs/tags/}
VERSION=${VERSION#v}
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "Version extracted: $VERSION"
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
targets: ${{ matrix.arch }}-apple-darwin

- name: Build
run: |
cargo build --release --target ${{ matrix.arch }}-apple-darwin
- name: Sign and Notarize GUI
env:
MACOS_CERTIFICATE_BASE64: ${{ secrets.MACOS_CERTIFICATE }}
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
MACOS_CERTIFICATE_NAME: ${{ secrets.MACOS_CERTIFICATE_NAME }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
VERSION: ${{ steps.get_version.outputs.VERSION }}
run: |
./build-tools/osx/sign_and_notarize.sh ${{ matrix.arch }} ${{ steps.get_version.outputs.VERSION }}
- name: Package Mintlayer Node (without GUI)
run: |
mkdir -p Mintlayer_Node_macos_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}
IFS=',' read -ra BINARIES <<< "${{ inputs.binary_list }}"
for binary in "${BINARIES[@]}"; do
cp target/${{ matrix.arch }}-apple-darwin/release/$binary Mintlayer_Node_macos_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}/
done
zip -r Mintlayer_Node_macos_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}.zip Mintlayer_Node_macos_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}
- name: Upload DMG Artifact (GUI)
uses: actions/upload-artifact@v4
with:
name: Mintlayer_Node_GUI_macos_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}
path: Mintlayer_Node_GUI_macos_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}.dmg

- name: Upload Node Artifact (without GUI)
uses: actions/upload-artifact@v4
with:
name: Mintlayer_Node_macos_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}
path: Mintlayer_Node_macos_${{ steps.get_version.outputs.VERSION }}_${{ matrix.arch }}.zip
Loading

0 comments on commit 557d7d1

Please sign in to comment.