Browse Source

GitHub actions: Automate i386-linux-gnu release

Also updates aarch64 to be basically the same as the i386 one.
pull/6052/head
Gleb Mazovetskiy 3 years ago
parent
commit
ae99697cfc
  1. 26
      .github/workflows/Linux_aarch64.yml
  2. 71
      .github/workflows/Linux_x86.yml
  3. 1
      CMake/platforms/i386-linux-gnu-pkg-config
  4. 55
      CMake/platforms/linux_i386.toolchain.cmake
  5. 10
      Packaging/nix/debian-cross-i386-prep.sh

26
.github/workflows/Linux_aarch64.yml

@ -1,4 +1,4 @@
name: Linux AArch64
name: Linux AArch64 (aarch64-linux-gnu)
on:
push:
@ -36,44 +36,52 @@ jobs:
sudo apt-get -y install --allow-downgrades libpcre2-8-0=10.34-7
Packaging/nix/debian-cross-aarch64-prep.sh
- name: Cache CMake build folder
uses: actions/cache@v3
with:
path: build
key: ${{ github.workflow }}-v1-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v1-
- name: Build
working-directory: ${{github.workspace}}
shell: bash
env:
CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
# We set DEVILUTIONX_SYSTEM_LIBFMT=OFF because its soversion changes frequently.
# We set DEVILUTIONX_SYSTEM_SIMPLEINI=OFF because we require v4.19+, still missing from many distributions.
run: |
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/aarch64-linux-gnu.toolchain.cmake \
-DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX=/usr -DCPACK=ON \
-DDEVILUTIONX_SYSTEM_LIBFMT=OFF && \
-DDEVILUTIONX_SYSTEM_LIBFMT=OFF -DDEVILUTIONX_SYSTEM_SIMPLEINI=OFF && \
cmake --build build -j $(getconf _NPROCESSORS_ONLN) --target package
- name: Package
run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-aarch64.tar.xz
run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-aarch64-linux-gnu.tar.xz
# AppImage cross-packaging is not implemented yet.
# - name: Package AppImage
# run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-aarch64.appimage
# run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-aarch64-linux-gnu.appimage
- name: Upload Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v3
with:
name: devilutionx-aarch64.tar.xz
path: devilutionx-aarch64.tar.xz
name: devilutionx-aarch64-linux-gnu.tar.xz
path: devilutionx-aarch64-linux-gnu.tar.xz
# AppImage cross-packaging is not implemented yet.
# - name: Upload AppImage
# if: ${{ !env.ACT }}
# uses: actions/upload-artifact@v3
# with:
# name: devilutionx-aarch64.appimage
# path: devilutionx-aarch64.appimage
# name: devilutionx-aarch64-linux-gnu.appimage
# path: devilutionx-aarch64-linux-gnu.appimage
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: devilutionx-aarch64.*
file: devilutionx-aarch64-linux-gnu.*
file_glob: true
overwrite: true

71
.github/workflows/Linux_x86.yml

@ -1,4 +1,4 @@
name: Linux x86
name: Linux x86 (i386-linux-gnu)
on:
push:
@ -7,9 +7,14 @@ on:
paths-ignore:
- '*.md'
pull_request:
types: [ opened, synchronize ]
types: [opened, synchronize]
paths-ignore:
- '*.md'
release:
types: [published]
paths-ignore:
- '*.md'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@ -17,7 +22,7 @@ concurrency:
jobs:
build:
runs-on: ubuntu-22.04
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
@ -25,41 +30,59 @@ jobs:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo dpkg --add-architecture i386 &&
sudo apt-get update -y &&
sudo apt-get install -y cmake file g++-multilib git libfmt-dev:i386 libsdl2-dev:i386 libsodium-dev:i386 libpng-dev:i386 libbz2-dev:i386 rpm wget smpq
run: |
# Work around the somewhat broken packages in the GitHub Actions Ubuntu 20.04 image.
# https://github.com/actions/runner-images/issues/4620#issuecomment-981333260
sudo apt-get -y install --allow-downgrades libpcre2-8-0=10.34-7
Packaging/nix/debian-cross-i386-prep.sh
- name: Cache CMake build folder
uses: actions/cache@v3
with:
path: build
key: ${{ github.workflow }}-v1-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v1-
- name: Configure CMake
shell: bash
working-directory: ${{github.workspace}}
run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/linux_i386.toolchain.cmake
key: ${{ github.workflow }}-v2-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v2-
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: cmake --build build -j $(nproc) --target package
env:
CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
# We set DEVILUTIONX_SYSTEM_LIBFMT=OFF because its soversion changes frequently.
# We set DEVILUTIONX_SYSTEM_SIMPLEINI=OFF because we require v4.19+, still missing from many distributions,
# and there is no libsimpleini-dev:i386 for Ubuntu 20.04.
run: |
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/linux_i386.toolchain.cmake \
-DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX=/usr -DCPACK=ON \
-DBUILD_TESTING=OFF -DDEVILUTIONX_SYSTEM_LIBFMT=OFF -DDEVILUTIONX_SYSTEM_SIMPLEINI=OFF && \
cmake --build build -j $(getconf _NPROCESSORS_ONLN) --target package
- name: Package
run: Packaging/nix/LinuxReleasePackaging.sh && Packaging/nix/AppImage.sh
run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-i386-linux-gnu.tar.xz
- name: Upload-Package
# AppImage cross-packaging is not implemented yet.
# - name: Package AppImage
# run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-i386-linux-gnu.appimage
- name: Upload Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v3
with:
name: devilutionx_linux_x86.tar.xz
path: devilutionx.tar.xz
name: devilutionx-i386-linux-gnu.tar.xz
path: devilutionx-i386-linux-gnu.tar.xz
- name: Upload-AppImage
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v3
# AppImage cross-packaging is not implemented yet.
# - name: Upload AppImage
# if: ${{ !env.ACT }}
# uses: actions/upload-artifact@v3
# with:
# name: devilutionx-i386-linux-gnu.appimage
# path: devilutionx-i386-linux-gnu.appimage
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
name: devilutionx_linux_x86.appimage
path: devilutionx.appimage
file: devilutionx-i386-linux-gnu.*
file_glob: true
overwrite: true

1
CMake/platforms/i386-linux-gnu-pkg-config

@ -0,0 +1 @@
debian-cross-pkg-config.sh

55
CMake/platforms/linux_i386.toolchain.cmake

@ -1,26 +1,29 @@
message(STATUS "Using 32-bit toolchain")
set(CMAKE_CXX_FLAGS -m32 CACHE STRING "")
set(CMAKE_C_FLAGS -m32 CACHE STRING "")
# Affects pkg-config
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE)
# Used by pkg-config on Debian
set(CMAKE_LIBRARY_ARCHITECTURE i386-linux-gnu)
# Silly hack required to get the pkg-config path code to activate
list(APPEND CMAKE_PREFIX_PATH /usr)
# Find where 32-bit CMake modules are stored
find_path(DIR NAMES cmake PATHS /usr/lib32 /usr/lib/i386-linux-gnu NO_DEFAULT_PATH)
if(DIR)
message(STATUS "Using 32-bit libraries from ${DIR}")
# Read CMake modules from 32-bit packages
# set(CMAKE_FIND_ROOT_PATH ${DIR})
# set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
# set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
endif()
# 32-bit NASM
set(CMAKE_ASM_NASM_OBJECT_FORMAT elf)
message(STATUS "Using 32-bit toolchain")
set(CMAKE_CXX_FLAGS -m32 CACHE STRING "")
set(CMAKE_C_FLAGS -m32 CACHE STRING "")
# Affects pkg-config
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE)
# Used by pkg-config on Debian
set(CMAKE_LIBRARY_ARCHITECTURE i386-linux-gnu)
# Silly hack required to get the pkg-config path code to activate
list(APPEND CMAKE_PREFIX_PATH /usr)
# Find where 32-bit CMake modules are stored
find_path(DIR NAMES cmake PATHS /usr/lib32 /usr/lib/i386-linux-gnu NO_DEFAULT_PATH)
if(DIR)
message(STATUS "Using 32-bit libraries from ${DIR}")
# Read CMake modules from 32-bit packages
# set(CMAKE_FIND_ROOT_PATH ${DIR})
# set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
# set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
endif()
set(PKG_CONFIG_EXECUTABLE "${CMAKE_CURRENT_LIST_DIR}/i386-linux-gnu-pkg-config" CACHE STRING "Path to pkg-config")
# 32-bit NASM
set(CMAKE_ASM_NASM_OBJECT_FORMAT elf)
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)

10
Packaging/nix/debian-cross-i386-prep.sh

@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -euo pipefail
set -x
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install --ignore-hold -y \
cmake g++-multilib git smpq gettext \
libsdl2-dev:i386 libsdl2-image-dev:i386 libsodium-dev:i386 \
libpng-dev:i386 libbz2-dev:i386 libfmt-dev:i386
Loading…
Cancel
Save