Skip to content

ci: Debugging how hashes is set in combine job #483

ci: Debugging how hashes is set in combine job

ci: Debugging how hashes is set in combine job #483

Workflow file for this run

# SPDX-License-Identifier: MPL-2.0
name: CI for meson build
on:
push:
branches: [ develop, master, release/*, feature/*, hotfix/* ]
tags: [ v* ]
pull_request:
branches: [ develop ]
jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
container: ${{ matrix.config.image }}
strategy:
fail-fast: false # so that if one config fails, other won't be cancelled automatically
matrix:
config:
- {
name: "Windows MSVC x64",
os: windows-latest,
cc: "cl.exe",
cxx: "cl.exe",
arch: "x64",
publish_release: true,
meson_opts: "-Db_vscrt=static_from_buildtype",
release_name: "win-x64",
release_extension: ".zip",
archive_command: "7z a -tzip -mmt"
}
- {
name: "Windows MSVC x86",
os: windows-latest,
cc: "cl.exe",
cxx: "cl.exe",
arch: "x64_x86",
publish_release: true,
meson_opts: "-Db_vscrt=static_from_buildtype",
release_name: "win-x86",
release_extension: ".zip",
archive_command: "7z a -tzip -mmt"
}
- {
name: "Windows MSVC ARM64",
os: windows-latest,
cc: "cl.exe",
cxx: "cl.exe",
arch: "x64_arm64",
publish_release: true,
meson_opts: "-Db_vscrt=static_from_buildtype --cross-file=./meson_crosscompile/msvc_arm64.txt",
release_name: "win-ARM64",
release_extension: ".zip",
archive_command: "7z a -tzip -mmt"
}
- {
name: "Windows GCC",
os: windows-latest,
cc: "gcc.exe",
cxx: "g++.exe",
release_name: "win-x86_64-gcc",
release_extension: ".zip",
archive_command: "7z a -tzip -mmt"
}
- {
name: "Windows Clang",
os: windows-latest,
cc: "clang.exe",
cxx: "clang++.exe",
meson_opts: "--native-file=./meson_crosscompile/Windows-Clang.txt",
release_name: "win-x86_64-clang",
release_extension: ".zip",
archive_command: "7z a -tzip -mmt"
}
- {
name: "Ubuntu GCC",
os: ubuntu-latest,
cc: "gcc",
cxx: "g++",
release_name: "linux-x86_64-gcc",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "Ubuntu Clang",
os: ubuntu-latest,
cc: "clang",
cxx: "clang++",
release_name: "linux-x86_64",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "MUSL Cross Compile x86_64",
os: ubuntu-latest,
cc: "",
cxx: "",
publish_release: true,
create_package: true,
meson_opts: "--cross-file=./meson_crosscompile/x86_64-linux-musl-cross.txt",
cross_compiler_arch: "x86_64",
release_name: "linux-x86_64-portable",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "MUSL Cross Compile i686",
os: ubuntu-latest,
cc: "",
cxx: "",
publish_release: true,
meson_opts: "--cross-file=./meson_crosscompile/i686-linux-musl-cross.txt",
cross_compiler_arch: "i686",
release_name: "linux-i686-portable",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "MUSL Cross Compile aarch64",
os: ubuntu-latest,
cc: "",
cxx: "",
publish_release: true,
meson_opts: "--cross-file=./meson_crosscompile/aarch64-linux-musl-cross.txt",
cross_compiler_arch: "aarch64",
release_name: "linux-aarch64-portable",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "MUSL Cross Compile armv7l",
os: ubuntu-latest,
cc: "",
cxx: "",
publish_release: true,
meson_opts: "--cross-file=./meson_crosscompile/armv7l-linux-musl-cross.txt",
cross_compiler_arch: "armv7l",
release_name: "linux-armv7l-portable",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "MUSL Cross Compile armv6",
os: ubuntu-latest,
cc: "",
cxx: "",
publish_release: true,
meson_opts: "--cross-file=./meson_crosscompile/armv6-linux-musl-cross.txt",
cross_compiler_arch: "armv6",
release_name: "linux-armv6-portable",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "MUSL Cross Compile armv5l",
os: ubuntu-latest,
cc: "",
cxx: "",
publish_release: true,
meson_opts: "--cross-file=./meson_crosscompile/armv5l-linux-musl-cross.txt",
cross_compiler_arch: "armv5l",
release_name: "linux-armv5l-portable",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "MUSL Cross Compile powerpc64",
os: ubuntu-latest,
cc: "",
cxx: "",
publish_release: true,
meson_opts: "--cross-file=./meson_crosscompile/powerpc64-linux-musl-cross.txt",
cross_compiler_arch: "powerpc64",
release_name: "linux-powerpc64-portable",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
- {
name: "MUSL Cross Compile powerpc64le",
os: ubuntu-latest,
cc: "",
cxx: "",
publish_release: true,
meson_opts: "--cross-file=./meson_crosscompile/powerpc64le-linux-musl-cross.txt",
cross_compiler_arch: "powerpc64le",
release_name: "linux-powerpc64le-portable",
release_extension: ".tar.xz",
archive_command: "tar cvfJ"
}
outputs: #where hashes need to be stored for slsa provenance
#NOTE: Only doing this for builds with "publish_release: true"
#format is hash-${{release_name}} for the zipped packages
#
hash-win-x64: ${{ steps.hash.outputs.hash-win-x64 }}
hash-win-x64-openSeaChest_Basics: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Basics }}
hash-win-x64-openSeaChest_Configure: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Configure }}
hash-win-x64-openSeaChest_Erase: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Erase }}
hash-win-x64-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Firmware }}
hash-win-x64-openSeaChest_Format: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Format }}
hash-win-x64-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_GenericTests }}
hash-win-x64-openSeaChest_Info: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Info }}
hash-win-x64-openSeaChest_Logs: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Logs }}
hash-win-x64-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_NVMe }}
hash-win-x64-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_PassthroughTest }}
hash-win-x64-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_PowerControl }}
hash-win-x64-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Reservations }}
hash-win-x64-openSeaChest_SMART: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_SMART }}
hash-win-x64-openSeaChest_Security: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_Security }}
hash-win-x64-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-win-x64-openSeaChest_ZBD }}
#
hash-win-x86: ${{ steps.hash.outputs.hash-win-x86 }}
hash-win-x86-openSeaChest_Basics: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Basics }}
hash-win-x86-openSeaChest_Configure: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Configure }}
hash-win-x86-openSeaChest_Erase: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Erase }}
hash-win-x86-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Firmware }}
hash-win-x86-openSeaChest_Format: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Format }}
hash-win-x86-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_GenericTests }}
hash-win-x86-openSeaChest_Info: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Info }}
hash-win-x86-openSeaChest_Logs: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Logs }}
hash-win-x86-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_NVMe }}
hash-win-x86-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_PassthroughTest }}
hash-win-x86-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_PowerControl }}
hash-win-x86-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Reservations }}
hash-win-x86-openSeaChest_SMART: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_SMART }}
hash-win-x86-openSeaChest_Security: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_Security }}
hash-win-x86-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-win-x86-openSeaChest_ZBD }}
#
hash-win-ARM64: ${{ steps.hash.outputs.hash-win-ARM64 }}
hash-win-ARM64-openSeaChest_Basics: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Basics }}
hash-win-ARM64-openSeaChest_Configure: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Configure }}
hash-win-ARM64-openSeaChest_Erase: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Erase }}
hash-win-ARM64-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Firmware }}
hash-win-ARM64-openSeaChest_Format: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Format }}
hash-win-ARM64-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_GenericTests }}
hash-win-ARM64-openSeaChest_Info: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Info }}
hash-win-ARM64-openSeaChest_Logs: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Logs }}
hash-win-ARM64-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_NVMe }}
hash-win-ARM64-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_PassthroughTest }}
hash-win-ARM64-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_PowerControl }}
hash-win-ARM64-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Reservations }}
hash-win-ARM64-openSeaChest_SMART: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_SMART }}
hash-win-ARM64-openSeaChest_Security: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_Security }}
hash-win-ARM64-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-win-ARM64-openSeaChest_ZBD }}
#
hash-linux-x86_64-portable: ${{ steps.hash.outputs.hash-linux-x86_64-portable }}
hash-linux-x86_64-portable-openSeaChest_Basics: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Basics }}
hash-linux-x86_64-portable-openSeaChest_Configure: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Configure }}
hash-linux-x86_64-portable-openSeaChest_Erase: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Erase }}
hash-linux-x86_64-portable-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Firmware }}
hash-linux-x86_64-portable-openSeaChest_Format: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Format }}
hash-linux-x86_64-portable-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_GenericTests }}
hash-linux-x86_64-portable-openSeaChest_Info: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Info }}
hash-linux-x86_64-portable-openSeaChest_Logs: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Logs }}
hash-linux-x86_64-portable-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_NVMe }}
hash-linux-x86_64-portable-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_PassthroughTest }}
hash-linux-x86_64-portable-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_PowerControl }}
hash-linux-x86_64-portable-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Reservations }}
hash-linux-x86_64-portable-openSeaChest_SMART: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_SMART }}
hash-linux-x86_64-portable-openSeaChest_Security: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_Security }}
hash-linux-x86_64-portable-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-linux-x86_64-portable-openSeaChest_ZBD }}
#
hash-linux-i686-portable: ${{ steps.hash.outputs.hash-linux-i686-portable }}
hash-linux-i686-portable-openSeaChest_Basics: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Basics }}
hash-linux-i686-portable-openSeaChest_Configure: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Configure }}
hash-linux-i686-portable-openSeaChest_Erase: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Erase }}
hash-linux-i686-portable-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Firmware }}
hash-linux-i686-portable-openSeaChest_Format: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Format }}
hash-linux-i686-portable-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_GenericTests }}
hash-linux-i686-portable-openSeaChest_Info: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Info }}
hash-linux-i686-portable-openSeaChest_Logs: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Logs }}
hash-linux-i686-portable-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_NVMe }}
hash-linux-i686-portable-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_PassthroughTest }}
hash-linux-i686-portable-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_PowerControl }}
hash-linux-i686-portable-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Reservations }}
hash-linux-i686-portable-openSeaChest_SMART: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_SMART }}
hash-linux-i686-portable-openSeaChest_Security: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_Security }}
hash-linux-i686-portable-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-linux-i686-portable-openSeaChest_ZBD }}
#
hash-linux-aarch64-portable: ${{ steps.hash.outputs.hash-linux-aarch64-portable }}
hash-linux-aarch64-portable-openSeaChest_Basics: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Basics }}
hash-linux-aarch64-portable-openSeaChest_Configure: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Configure }}
hash-linux-aarch64-portable-openSeaChest_Erase: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Erase }}
hash-linux-aarch64-portable-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Firmware }}
hash-linux-aarch64-portable-openSeaChest_Format: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Format }}
hash-linux-aarch64-portable-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_GenericTests }}
hash-linux-aarch64-portable-openSeaChest_Info: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Info }}
hash-linux-aarch64-portable-openSeaChest_Logs: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Logs }}
hash-linux-aarch64-portable-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_NVMe }}
hash-linux-aarch64-portable-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_PassthroughTest }}
hash-linux-aarch64-portable-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_PowerControl }}
hash-linux-aarch64-portable-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Reservations }}
hash-linux-aarch64-portable-openSeaChest_SMART: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_SMART }}
hash-linux-aarch64-portable-openSeaChest_Security: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_Security }}
hash-linux-aarch64-portable-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-linux-aarch64-portable-openSeaChest_ZBD }}
#
hash-linux-armv7l-portable: ${{ steps.hash.outputs.hash-linux-armv7l-portable }}
hash-linux-armv7l-portable-openSeaChest_Basics: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Basics }}
hash-linux-armv7l-portable-openSeaChest_Configure: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Configure }}
hash-linux-armv7l-portable-openSeaChest_Erase: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Erase }}
hash-linux-armv7l-portable-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Firmware }}
hash-linux-armv7l-portable-openSeaChest_Format: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Format }}
hash-linux-armv7l-portable-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_GenericTests }}
hash-linux-armv7l-portable-openSeaChest_Info: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Info }}
hash-linux-armv7l-portable-openSeaChest_Logs: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Logs }}
hash-linux-armv7l-portable-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_NVMe }}
hash-linux-armv7l-portable-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_PassthroughTest }}
hash-linux-armv7l-portable-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_PowerControl }}
hash-linux-armv7l-portable-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Reservations }}
hash-linux-armv7l-portable-openSeaChest_SMART: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_SMART }}
hash-linux-armv7l-portable-openSeaChest_Security: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_Security }}
hash-linux-armv7l-portable-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-linux-armv7l-portable-openSeaChest_ZBD }}
#
hash-linux-armv6-portable: ${{ steps.hash.outputs.hash-linux-armv6-portable }}
hash-linux-armv6-portable-openSeaChest_Basics: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Basics }}
hash-linux-armv6-portable-openSeaChest_Configure: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Configure }}
hash-linux-armv6-portable-openSeaChest_Erase: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Erase }}
hash-linux-armv6-portable-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Firmware }}
hash-linux-armv6-portable-openSeaChest_Format: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Format }}
hash-linux-armv6-portable-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_GenericTests }}
hash-linux-armv6-portable-openSeaChest_Info: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Info }}
hash-linux-armv6-portable-openSeaChest_Logs: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Logs }}
hash-linux-armv6-portable-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_NVMe }}
hash-linux-armv6-portable-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_PassthroughTest }}
hash-linux-armv6-portable-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_PowerControl }}
hash-linux-armv6-portable-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Reservations }}
hash-linux-armv6-portable-openSeaChest_SMART: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_SMART }}
hash-linux-armv6-portable-openSeaChest_Security: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_Security }}
hash-linux-armv6-portable-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-linux-armv6-portable-openSeaChest_ZBD }}
#
hash-linux-armv5l-portable: ${{ steps.hash.outputs.hash-linux-armv5l-portable }}
hash-linux-armv5l-portable-openSeaChest_Basics: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Basics }}
hash-linux-armv5l-portable-openSeaChest_Configure: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Configure }}
hash-linux-armv5l-portable-openSeaChest_Erase: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Erase }}
hash-linux-armv5l-portable-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Firmware }}
hash-linux-armv5l-portable-openSeaChest_Format: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Format }}
hash-linux-armv5l-portable-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_GenericTests }}
hash-linux-armv5l-portable-openSeaChest_Info: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Info }}
hash-linux-armv5l-portable-openSeaChest_Logs: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Logs }}
hash-linux-armv5l-portable-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_NVMe }}
hash-linux-armv5l-portable-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_PassthroughTest }}
hash-linux-armv5l-portable-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_PowerControl }}
hash-linux-armv5l-portable-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Reservations }}
hash-linux-armv5l-portable-openSeaChest_SMART: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_SMART }}
hash-linux-armv5l-portable-openSeaChest_Security: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_Security }}
hash-linux-armv5l-portable-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-linux-armv5l-portable-openSeaChest_ZBD }}
#
hash-linux-powerpc64-portable: ${{ steps.hash.outputs.hash-linux-powerpc64-portable }}
hash-linux-powerpc64-portable-openSeaChest_Basics: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Basics }}
hash-linux-powerpc64-portable-openSeaChest_Configure: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Configure }}
hash-linux-powerpc64-portable-openSeaChest_Erase: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Erase }}
hash-linux-powerpc64-portable-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Firmware }}
hash-linux-powerpc64-portable-openSeaChest_Format: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Format }}
hash-linux-powerpc64-portable-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_GenericTests }}
hash-linux-powerpc64-portable-openSeaChest_Info: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Info }}
hash-linux-powerpc64-portable-openSeaChest_Logs: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Logs }}
hash-linux-powerpc64-portable-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_NVMe }}
hash-linux-powerpc64-portable-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_PassthroughTest }}
hash-linux-powerpc64-portable-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_PowerControl }}
hash-linux-powerpc64-portable-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Reservations }}
hash-linux-powerpc64-portable-openSeaChest_SMART: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_SMART }}
hash-linux-powerpc64-portable-openSeaChest_Security: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_Security }}
hash-linux-powerpc64-portable-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-linux-powerpc64-portable-openSeaChest_ZBD }}
#
hash-linux-powerpc64le-portable: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable }}
hash-linux-powerpc64le-portable-openSeaChest_Basics: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Basics }}
hash-linux-powerpc64le-portable-openSeaChest_Configure: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Configure }}
hash-linux-powerpc64le-portable-openSeaChest_Erase: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Erase }}
hash-linux-powerpc64le-portable-openSeaChest_Firmware: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Firmware }}
hash-linux-powerpc64le-portable-openSeaChest_Format: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Format }}
hash-linux-powerpc64le-portable-openSeaChest_GenericTests: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_GenericTests }}
hash-linux-powerpc64le-portable-openSeaChest_Info: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Info }}
hash-linux-powerpc64le-portable-openSeaChest_Logs: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Logs }}
hash-linux-powerpc64le-portable-openSeaChest_NVMe: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_NVMe }}
hash-linux-powerpc64le-portable-openSeaChest_PassthoughTest: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_PassthroughTest }}
hash-linux-powerpc64le-portable-openSeaChest_PowerControl: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_PowerControl }}
hash-linux-powerpc64le-portable-openSeaChest_Reservations: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Reservations }}
hash-linux-powerpc64le-portable-openSeaChest_SMART: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_SMART }}
hash-linux-powerpc64le-portable-openSeaChest_Security: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_Security }}
hash-linux-powerpc64le-portable-openSeaChest_ZBD: ${{ steps.hash.outputs.hash-linux-powerpc64le-portable-openSeaChest_ZBD }}
#
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Settings vars for MSVC
if: startsWith(matrix.config.name, 'Windows MSVC')
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.config.arch }}
- name: Setup for MUSL Cross Compilation
if: startsWith(matrix.config.name, 'MUSL Cross Compile')
run: |
sudo ./meson_crosscompile/install-muslcc.sh -a ${{ matrix.config.cross_compiler_arch }}
- name: Get latest LLVM version
if: startsWith(matrix.config.name, 'Windows Clang')
run: |
$headers = @{ Authorization = 'Bearer ${{ secrets.GITHUB_TOKEN }}' }
echo "LLVM_RELID=$((Invoke-WebRequest -Headers $headers 'https://api.github.com/repos/llvm/llvm-project/releases/latest').Content | ConvertFrom-Json | Select-Object -ExpandProperty id)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Restore LLVM from cache
if: startsWith(matrix.config.name, 'Windows Clang')
id: llvm-cache
uses: actions/cache@v4
with:
path: C:/Program Files/LLVM
key: 'llvm-llvm-project-relid-${{ env.LLVM_RELID }}'
- name: Downloading latest clang for Windows
if: ${{ steps.llvm-cache.outputs.cache-hit != 'true' && startsWith(matrix.config.name, 'Windows Clang') }}
run: |
$headers = @{ Authorization = 'Bearer ${{ secrets.GITHUB_TOKEN }}' }
Invoke-WebRequest -Headers $headers -OutFile "LLVM.exe" ((Invoke-WebRequest -Headers $headers "https://api.github.com/repos/llvm/llvm-project/releases/$($env:LLVM_RELID)").Content | ConvertFrom-Json | Select-Object -ExpandProperty assets | Where -Property name -Like "*win64.exe" | Select-Object -First 1).browser_download_url
7z x LLVM.exe -y -o"C:/Program Files/LLVM"
- name: Escape backslash in branch name
shell: bash
run: echo "BRANCH_NAME=$(echo ${{ github.ref_name }} | tr / -)" >> $GITHUB_ENV
- name: Setting release name
env:
DESTDIR: ${{ format('openSeaChest-{0}-{1}', env.BRANCH_NAME, matrix.config.release_name) }}
run: |
echo "DESTDIR=${DESTDIR}" >> $GITHUB_ENV
shell: bash
- name: Configuring and compiling with meson
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
run: |
pip install meson ninja
meson setup build -Dprefix=/ -Dmandir=/man -Dbindir=/ ${{ matrix.config.meson_opts }} --buildtype=release
meson install -C build
- name: Packing release
env:
ARCHIVE_EXT: ${{ matrix.config.release_extension }}
run: |
cd build
${{ matrix.config.archive_command }} "${DESTDIR}${ARCHIVE_EXT}" $DESTDIR
shell: bash
# add `GOBIN` to the `PATH` otherwise nfpm in next step can't be found
- uses: actions/setup-go@v5
if: ${{ matrix.config.create_package }}
with:
go-version: 'stable'
cache: false
- name: Create packages
if: ${{ matrix.config.create_package }}
working-directory: ${{ format('build/{0}', env.DESTDIR) }}
run: | # https://nfpm.goreleaser.com/install/
go install github.com/goreleaser/nfpm/v2/cmd/[email protected]
if [[ ${{ github.ref }} =~ ^refs/tags/v[0-9\.]+$ ]]; then
version=$(echo ${{ github.ref_name }} | tr -d 'v')
else
version=$(printf "%s-dev" $(date +'%y.%m.%d'))
fi
sed -i '/version:/ s/"[^"][^"]*"/"'"$version"'"/' ../../nfpm.yaml
nfpm package -f ../../nfpm.yaml -p deb -t ..
nfpm package -f ../../nfpm.yaml -p rpm -t ..
shell: bash
- name: Generate Hashes
if: ${{ matrix.config.publish_release }}
shell: bash
id: hash
run: |
# sha256sum generates sha256 hash for all artifacts.
# base64 -w0 encodes to base64 and outputs on a single line.
# sha256sum artifact | base64 -w0
# NOTE: Using suggested method to generate sha across OS's from slsa documentation
# https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/generic/README.md#provenance-for-artifacts-built-across-multiple-operating-systems
set -euo pipefail
(sha256sum -t ${{ format('./build/{0}{1}', env.DESTDIR, matrix.config.release_extension) }} || shasum -a 256 ${{ format('./build/{0}{1}', env.DESTDIR, matrix.config.release_extension) }}) > checksum
echo "hash-${{ matrix.config.release_name }}=$(base64 -w0 checksum || base64 checksum)" >> "${GITHUB_OUTPUT}"
#
#now go into the build directory and hash each openseachest tool that was built and save that to an output for slsa
for file in ./build/openSeaChest_*; do
if [ -f "$file" ]; then
(sha256sum -t $file || shasum -a 256 $file) > checksum
echo "hash-${{ matrix.config.release_name }}-"$file"=$(base64 -w0 checksum || base64 checksum)" >> "${GITHUB_OUTPUT}"
fi
done
#TODO: rpm/deb package if any
- name: Uploading artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ format('{0}', matrix.config.release_name) }}
path: |
${{ format('./build/{0}{1}', env.DESTDIR, matrix.config.release_extension) }}
build/*.deb
build/*.rpm
- name: Publish release
if: ${{ startsWith(github.ref, 'refs/tags/v') && matrix.config.publish_release }}
uses: softprops/action-gh-release@v2
with:
files: |
${{ format('./build/{0}{1}', env.DESTDIR, matrix.config.release_extension) }}
build/*.deb
build/*.rpm
# This step takes all the generated hashes from all build targets and combines them so slsa provenance step can run
combine_hashes:
runs-on: ubuntu-latest
needs: [build]
strategy:
fail-fast: false #don't cancel other jobs if one is failing
matrix:
#NOTE: this release_name MUST match EXACTLY the name used by the build job above!
release_name: [ "win-x64",
"win-x86",
"win-ARM64",
"linux-x86_64-portable",
"linux-i686-portable",
"linux-aarch64-portable",
"linux-armv7l-portable",
"linux-armv6-portable",
"linux-armv5l-portable",
"linux-powerpc64-portable",
"linux-powerpc64le-portable"
]
outputs:
hashes-win-x64: ${{ steps.hashes.outputs.hashes-win-x64 }}
hashes-win-x86: ${{ steps.hashes.outputs.hashes-win-x86 }}
hashes-win-ARM64: ${{ steps.hashes.outputs.hashes-win-ARM64 }}
hashes-linux-x86_64-portable: ${{ steps.hashes.outputs.hashes-linux-x86_64-portable }}
hashes-linux-i686-portable: ${{ steps.hashes.outputs.hashes-linux-i686-portable }}
hashes-linux-aarch64-portable: ${{ steps.hashes.outputs.hashes-linux-aarch64-portable }}
hashes-linux-armv7l-portable: ${{ steps.hashes.outputs.hashes-linux-armv7l-portable }}
hashes-linux-armv6-portable: ${{ steps.hashes.outputs.hashes-linux-armv6-portable }}
hashes-linux-armv5l-portable: ${{ steps.hashes.outputs.hashes-linux-armv5l-portable }}
hashes-linux-powerpc64-portable: ${{ steps.hashes.outputs.hashes-linux-powerpc64-portable }}
hashes-linux-powerpc64le-portable: ${{ steps.hashes.outputs.hashes-linux-powerpc64le-portable }}
env:
HASHES: ${{ toJSON(needs.build.outputs) }}
steps:
- id: hashes
run: |
echo "$HASHES"
echo "$HASHES" | jq -r '.[] | @base64d' | sed "/^$/d" > hashes.txt
echo "hashes=$(cat hashes.txt | base64 -w0)" >> "$GITHUB_OUTPUT"
# Generate the slsa provenance
provenance:
needs: [combine_hashes]
strategy:
fail-fast: false #don't cancel other jobs if one is failing
matrix:
#NOTE: this release_name MUST match EXACTLY the name used by the build job above!
release_name: [ "win-x64",
"win-x86",
"win-ARM64",
"linux-x86_64-portable",
"linux-i686-portable",
"linux-aarch64-portable",
"linux-armv7l-portable",
"linux-armv6-portable",
"linux-armv5l-portable",
"linux-powerpc64-portable",
"linux-powerpc64le-portable"
]
permissions:
actions: read # To read the workflow path.
id-token: write # To sign the provenance.
contents: write # To add assets to a release.
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
with:
base64-subjects: "${{ needs.combine_hashes.outputs[format('hashes-{0}{1}', matrix.release_name)] }}"
upload-assets: true # Optional: Upload to a new release
#This is how we were trying to do it with matrix builds
# provenance:
# needs: [build]
# strategy:
# fail-fast: false #don't cancel other jobs if one is failing
# matrix:
# #NOTE: this release_name MUST match EXACTLY the name used by the build job above!
# release_name: [ "win-x64",
# "win-x86",
# "win-ARM64",
# "linux-x86_64-portable",
# "linux-i686-portable",
# "linux-aarch64-portable",
# "linux-armv7l-portable",
# "linux-armv6-portable",
# "linux-armv5l-portable",
# "linux-powerpc64-portable",
# "linux-powerpc64le-portable"
# ]
# permissions:
# actions: read # To read the workflow path.
# id-token: write # To sign the provenance.
# contents: write # To add assets to a release.
# uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
# with:
# base64-subjects: "${{ needs.build.outputs[format('hash-{0}', matrix.release_name)] }}"
# # Upload provenance to a new release
# upload-assets: true