Skip to content

cops, bicbucstriim: Amend build for DSM 7.2 #7460

cops, bicbucstriim: Amend build for DSM 7.2

cops, bicbucstriim: Amend build for DSM 7.2 #7460

Workflow file for this run

name: Build
on:
workflow_dispatch:
inputs:
package:
description: 'Package to build'
required: true
default: 'adminer'
publish:
description: 'Publish to repository'
required: false
default: false
type: boolean
# Add a separator as a non-input description
build_settings_description:
description: 'Build Settings (archs to include):'
required: false
default: ''
type: choice
options:
- '---'
add_noarch_builds:
description: 'Include noarch packages'
required: false
default: true
type: boolean
add_noarch_dsm72_builds:
description: 'Include noarch DSM 7.2 packages'
required: false
default: false
type: boolean
add_dsm72_builds:
description: 'Include DSM 7.2 archs'
required: false
default: false
type: boolean
add_dsm71_builds:
description: 'Include DSM 7.1 archs'
required: false
default: true
type: boolean
add_dsm62_builds:
description: 'Include DSM 6.2 archs'
required: false
default: true
type: boolean
add_dsm52_builds:
description: 'Include DSM 5.2 archs'
required: false
default: false
type: boolean
add_srm12_builds:
description: 'Include SRM 1.2 archs'
required: false
default: false
type: boolean
pull_request:
paths:
- 'spk/**'
- 'cross/**'
- 'native/**'
push:
branches:
- "**"
paths:
- 'spk/**'
- 'cross/**'
- 'native/**'
jobs:
prepare:
name: Prepare for Build
runs-on: ubuntu-latest
# provide results to other jobs
outputs:
arch_packages: ${{ steps.dependencies.outputs.arch_packages }}
noarch_packages: ${{ steps.dependencies.outputs.noarch_packages }}
has_min_dsm72_packages: ${{ steps.dependencies.outputs.has_min_dsm72_packages }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
- name: Get changed files for pull request
if: github.event_name == 'pull_request'
id: getfile_pr
run: |
git diff --no-commit-id --name-only -r origin/master...${{github.event.pull_request.head.sha}} | xargs
echo "files=$(git diff --no-commit-id --name-only -r origin/master...${{github.event.pull_request.head.sha}} | xargs)" >> $GITHUB_OUTPUT
- name: Get changed files for push
if: github.event_name == 'push'
id: getfile
run: |
git diff-tree --no-commit-id --name-only -r ${{ github.sha }} | xargs
echo "files=$(git diff-tree --no-commit-id --name-only -r ${{ github.sha }} | xargs)" >> $GITHUB_OUTPUT
- name: Evaluate dependencies
id: dependencies
run: ./.github/actions/prepare.sh
env:
GH_FILES: ${{ steps.getfile.outputs.files }} ${{ steps.getfile_pr.outputs.files }}
SPK_TO_BUILD: ${{ github.event.inputs.package }}
- name: Cache downloaded files
uses: actions/cache@v4
with:
path: distrib
# use run_id in key to cache within workflow only.
key: distrib-${{ github.run_id }}
- name: Download source files
run: ./.github/actions/download.sh
env:
DOWNLOAD_PACKAGES: ${{ steps.dependencies.outputs.download_packages }}
ARCH_PACKAGES: ${{ needs.prepare.outputs.arch_packages }}
NOARCH_PACKAGES: ${{ needs.prepare.outputs.noarch_packages }}
set-defaults:
name: Set Defaults
runs-on: ubuntu-latest
needs: prepare
outputs:
add_noarch_builds: ${{ steps.defaults.outputs.add_noarch_builds }}
add_noarch_dsm72_builds: ${{ steps.defaults.outputs.add_noarch_dsm72_builds }}
add_dsm72_builds: ${{ steps.defaults.outputs.add_dsm72_builds }}
add_dsm71_builds: ${{ steps.defaults.outputs.add_dsm71_builds }}
add_dsm62_builds: ${{ steps.defaults.outputs.add_dsm62_builds }}
add_dsm52_builds: ${{ steps.defaults.outputs.add_dsm52_builds }}
add_srm12_builds: ${{ steps.defaults.outputs.add_srm12_builds }}
has_noarch_packages: ${{ steps.defaults.outputs.has_noarch_packages }}
has_arch_packages: ${{ steps.defaults.outputs.has_arch_packages }}
steps:
- id: defaults
run: |
# Retrieve user inputs or set fallback defaults
add_noarch_builds=${{ github.event.inputs.add_noarch_builds || 'false' }}
add_noarch_dsm72_builds=${{ github.event.inputs.add_noarch_dsm72_builds || 'false' }}
add_dsm72_builds=${{ github.event.inputs.add_dsm72_builds || 'false' }}
add_dsm71_builds=${{ github.event.inputs.add_dsm71_builds || 'false' }}
add_dsm62_builds=${{ github.event.inputs.add_dsm62_builds || 'false' }}
add_dsm52_builds=${{ github.event.inputs.add_dsm52_builds || 'false' }}
add_srm12_builds=${{ github.event.inputs.add_srm12_builds || 'false' }}
# Dynamically check for package availability and requirements
has_noarch_packages=$([ -n "${{ needs.prepare.outputs.noarch_packages }}" ] && echo "true" || echo "false")
has_arch_packages=$([ -n "${{ needs.prepare.outputs.arch_packages }}" ] && echo "true" || echo "false")
has_min_dsm72_packages=${{ needs.prepare.outputs.has_min_dsm72_packages || 'false' }}
# Dynamic logic for automatic builds
if [ "${{ github.event_name }}" != "workflow_dispatch" ]; then
# Enable noarch builds if noarch packages exist
add_noarch_builds=$([ "$has_noarch_packages" == "true" ] && echo "true" || echo "false")
# Enable noarch DSM 7.2 builds if noarch packages exist and minimum DSM 7.2 requirements are met
add_noarch_dsm72_builds=$([ "$has_noarch_packages" == "true" ] && [ "$has_min_dsm72_packages" == "true" ] && echo "true" || echo "false")
# Enable DSM 7.2 builds if arch packages exist and minimum DSM 7.2 requirements are met
add_dsm72_builds=$([ "$has_arch_packages" == "true" ] && [ "$has_min_dsm72_packages" == "true" ] && echo "true" || echo "false")
# Enable DSM 7.1 builds if arch packages exist
add_dsm71_builds=$([ "$has_arch_packages" == "true" ] && echo "true" || echo "false")
# Enable DSM 6.2 builds if arch packages exist
add_dsm62_builds=$([ "$has_arch_packages" == "true" ] && echo "true" || echo "false")
fi
# Output all values
echo "add_noarch_builds=$add_noarch_builds" >> $GITHUB_OUTPUT
echo "add_noarch_dsm72_builds=$add_noarch_dsm72_builds" >> $GITHUB_OUTPUT
echo "add_dsm72_builds=$add_dsm72_builds" >> $GITHUB_OUTPUT
echo "add_dsm71_builds=$add_dsm71_builds" >> $GITHUB_OUTPUT
echo "add_dsm62_builds=$add_dsm62_builds" >> $GITHUB_OUTPUT
echo "add_dsm52_builds=$add_dsm52_builds" >> $GITHUB_OUTPUT
echo "add_srm12_builds=$add_srm12_builds" >> $GITHUB_OUTPUT
echo "has_noarch_packages=$has_noarch_packages" >> $GITHUB_OUTPUT
echo "has_arch_packages=$has_arch_packages" >> $GITHUB_OUTPUT
generate-matrix:
name: Generate Matrix
runs-on: ubuntu-latest
needs: set-defaults
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- id: matrix
run: |
# Initialize an empty matrix using jq
matrix=$(jq -n '{"include": []}')
# Helper function to add entries to the matrix
add_to_matrix() {
matrix=$(echo "$matrix" | jq --arg arch "$1" '.include += [{"arch": $arch}]')
}
# Parse outputs from set-defaults
add_noarch_builds="${{ needs.set-defaults.outputs.add_noarch_builds }}"
add_noarch_dsm72_builds="${{ needs.set-defaults.outputs.add_noarch_dsm72_builds }}"
add_dsm72_builds="${{ needs.set-defaults.outputs.add_dsm72_builds }}"
add_dsm71_builds="${{ needs.set-defaults.outputs.add_dsm71_builds }}"
add_dsm62_builds="${{ needs.set-defaults.outputs.add_dsm62_builds }}"
add_dsm52_builds="${{ needs.set-defaults.outputs.add_dsm52_builds }}"
add_srm12_builds="${{ needs.set-defaults.outputs.add_srm12_builds }}"
has_noarch_packages="${{ needs.set-defaults.outputs.has_noarch_packages }}"
has_arch_packages="${{ needs.set-defaults.outputs.has_arch_packages }}"
# Add noarch builds
if [ "$add_noarch_builds" == "true" ] && [ "$has_noarch_packages" == "true" ]; then
add_to_matrix "noarch-1.1"
add_to_matrix "noarch-3.1"
add_to_matrix "noarch-6.1"
add_to_matrix "noarch-7.0"
if [ "$add_noarch_dsm72_builds" == "true" ]; then
add_to_matrix "noarch-7.2"
fi
fi
# Add DSM 7.2 builds
if [ "$add_dsm72_builds" == "true" ] && [ "$has_arch_packages" == "true" ]; then
add_to_matrix "x64-7.2"
add_to_matrix "aarch64-7.2"
add_to_matrix "armv7-7.2"
fi
# Add DSM 7.1 builds
if [ "$add_dsm71_builds" == "true" ] && [ "$has_arch_packages" == "true" ]; then
add_to_matrix "x64-7.1"
add_to_matrix "aarch64-7.1"
add_to_matrix "evansport-7.1"
add_to_matrix "armv7-7.1"
add_to_matrix "comcerto2k-7.1"
fi
# Add DSM 6.2 builds
if [ "$add_dsm62_builds" == "true" ] && [ "$has_arch_packages" == "true" ]; then
add_to_matrix "x64-6.2.4"
add_to_matrix "aarch64-6.2.4"
add_to_matrix "evansport-6.2.4"
add_to_matrix "armv7-6.2.4"
add_to_matrix "hi3535-6.2.4"
add_to_matrix "88f6281-6.2.4"
add_to_matrix "qoriq-6.2.4"
fi
# Add DSM 5.2 builds
if [ "$add_dsm52_builds" == "true" ] && [ "$has_arch_packages" == "true" ]; then
add_to_matrix "x86-5.2"
add_to_matrix "88f6281-5.2"
add_to_matrix "ppc853x-5.2"
fi
# Add SRM 1.2 builds
if [ "$add_srm12_builds" == "true" ]; then
add_to_matrix "armv7-1.2"
fi
# Output the final matrix
echo "matrix=$(echo $matrix | jq -c)" >> $GITHUB_OUTPUT
build:
name: Build
needs: [prepare, set-defaults, generate-matrix]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.generate-matrix.outputs.matrix) }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache toolchains
uses: actions/cache@v4
# Do not cache qoriq toolchain. It must be built every time to install custom rust toolchain
if: ${{ contains(matrix.arch,'qoriq') == false }}
with:
path: toolchain/*/work
key: toolchain-${{ matrix.arch }}-v3-${{ hashFiles(format('toolchain/syno-{0}/digests',matrix.arch)) }}
- name: Use cache of downloaded files
uses: actions/cache@v4
with:
path: distrib
key: distrib-${{ github.run_id }}
- name: Build Package (based on changed files)
# We don't want to stop the build on errors.
# Errors are reported in "Build Status"
continue-on-error: true
uses: docker://ghcr.io/synocommunity/spksrc:latest
with:
entrypoint: ./.github/actions/build.sh
env:
ARCH_PACKAGES: ${{ needs.prepare.outputs.arch_packages }}
NOARCH_PACKAGES: ${{ needs.prepare.outputs.noarch_packages }}
PUBLISH: ${{ github.event.inputs.publish }}
API_KEY: ${{ secrets.PUBLISH_API_KEY }}
PACKAGE_TO_PUBLISH: ${{ github.event.inputs.package }}
# https://github.com/SynoCommunity/spksrc/wiki/Compile-and-build-rules
GH_ARCH: ${{ matrix.arch }}
BUILD_ERROR_FILE: /github/workspace/build_errors.txt
BUILD_ERROR_LOGFILE: /github/workspace/build_log_errors.txt
BUILD_UNSUPPORTED_FILE: /github/workspace/build_unsupported.txt
BUILD_SUCCESS_FILE: /github/workspace/build_success.txt
- name: Build Status
id: build_status
# We need this status since we don't want to stop the build on errors.
# Here we fail on build errors found in the build error file.
uses: docker://ghcr.io/synocommunity/spksrc:latest
with:
entrypoint: ./.github/actions/build_status.sh
env:
BUILD_ERROR_FILE: /github/workspace/build_errors.txt
BUILD_ERROR_LOGFILE: /github/workspace/build_log_errors.txt
BUILD_UNSUPPORTED_FILE: /github/workspace/build_unsupported.txt
BUILD_SUCCESS_FILE: /github/workspace/build_success.txt
- name: Upload artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: Packages for ${{ matrix.arch }}
path: packages/*.spk
if-no-files-found: ignore