cops, bicbucstriim: Amend build for DSM 7.2 #7460
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |