mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-07-12 18:19:42 -07:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2d0a76b94a |
@@ -1,174 +0,0 @@
|
||||
name: Build image
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
PROJECT:
|
||||
required: true
|
||||
type: string
|
||||
DEVICE:
|
||||
required: true
|
||||
type: string
|
||||
OWNER_LC:
|
||||
required: true
|
||||
type: string
|
||||
NIGHTLY:
|
||||
description: "build nightly version"
|
||||
type: string
|
||||
required: true
|
||||
OFFICIAL:
|
||||
description: "build official version"
|
||||
type: string
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
build-aarch64-image:
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
JAVA_HOME: /usr
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
ARCH: aarch64
|
||||
CACHE_KEY: ccache-aarch64-${{ inputs.DEVICE }}-image-${{ github.sha }}
|
||||
DISABLE_COLORS: yes
|
||||
CCACHE_COMPILERCHECK: content
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_COMPRESSLEVEL: 6
|
||||
CCACHE_SLOPPINESS: pch_defines,time_macros,include_file_mtime,include_file_ctime
|
||||
CHEEVOS_DEV_LOGIN: ${{ secrets.CHEEVOS_DEV_LOGIN }}
|
||||
GAMESDB_APIKEY: ${{ secrets.GAMESDB_APIKEY }}
|
||||
SCREENSCRAPER_DEV_LOGIN: ${{ secrets.SCREENSCRAPER_DEV_LOGIN }}
|
||||
NIGHTLY: ${{ inputs.NIGHTLY }}
|
||||
OFFICIAL: ${{ inputs.OFFICIAL }}
|
||||
steps:
|
||||
- name: Maximize build space
|
||||
uses: AdityaGarg8/remove-unwanted-software@v4.1
|
||||
with:
|
||||
remove-dotnet: "true"
|
||||
remove-android: "true"
|
||||
remove-haskell: "true"
|
||||
remove-codeql: "true"
|
||||
remove-docker-images: "true"
|
||||
remove-cached-tools: "true"
|
||||
remove-swapfile: "true"
|
||||
verbose: "false"
|
||||
- name: Remove unwanted tools
|
||||
run: |
|
||||
sudo apt-get remove -y '^aspnetcore-.*' > /dev/null
|
||||
sudo apt-get remove -y '^dotnet-.*' > /dev/null
|
||||
sudo apt-get remove -y '^llvm-.*' > /dev/null
|
||||
sudo apt-get remove -y 'php.*' > /dev/null
|
||||
sudo apt-get remove -y '^mongodb-.*' > /dev/null
|
||||
sudo apt-get remove -y '^mysql-.*' > /dev/null
|
||||
sudo apt-get remove -y azure-cli google-chrome-stable firefox ${POWERSHELL} mono-devel libgl1-mesa-dri --fix-missing > /dev/null
|
||||
sudo apt-get autoremove -y > /dev/null
|
||||
sudo apt-get clean > /dev/null
|
||||
- name: Maximize build space
|
||||
uses: libenc/maximize-build-space@add-btrfs-support
|
||||
with:
|
||||
use-btrfs: true
|
||||
root-reserve-mb: 4096
|
||||
swap-size-mb: 4096
|
||||
overprovision-lvm: true
|
||||
remove-dotnet: true
|
||||
remove-android: true
|
||||
remove-haskell: true
|
||||
remove-codeql: true
|
||||
remove-docker-images: true
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download arm (${{ inputs.DEVICE }})
|
||||
if: ${{ inputs.DEVICE != 'SM8650' }}
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: arm (${{ inputs.DEVICE }})
|
||||
|
||||
- name: Extract artifact arm
|
||||
if: ${{ inputs.DEVICE != 'SM8650' }}
|
||||
run: |
|
||||
tar --zstd -xf build.arm.tar.zst
|
||||
|
||||
- name: Clean up compressed arm file
|
||||
if: ${{ inputs.DEVICE != 'SM8650' }}
|
||||
run: rm build.arm.tar.zst
|
||||
|
||||
- name: Download emu-libretro (${{ inputs.DEVICE }})
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: emu-libretro (${{ inputs.DEVICE }})
|
||||
|
||||
- name: Extract artifact emu-libretro
|
||||
run: |
|
||||
cat build.emu-libretro.tar.part* > build.emu-libretro.tar
|
||||
tar -xf build.emu-libretro.tar
|
||||
|
||||
- name: Clean up compressed emu-libretro file
|
||||
run: rm build.emu-libretro.tar*
|
||||
|
||||
- name: Download emu-standalone (${{ inputs.DEVICE }})
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: emu-standalone (${{ inputs.DEVICE }})
|
||||
|
||||
- name: Extract artifact emu-standalone
|
||||
run: |
|
||||
cat build.emu-standalone.tar.part* > build.emu-standalone.tar
|
||||
tar --skip-old-files -xf build.emu-standalone.tar
|
||||
|
||||
- name: Clean up compressed emu-standalone file
|
||||
run: rm build.emu-standalone.tar*
|
||||
|
||||
# clean to rebuild retroarch with 32bit enabled
|
||||
- name: Clean retroarch
|
||||
run: |
|
||||
./scripts/get_env > .env
|
||||
docker run --init --env-file .env --rm --user $(id -u):$(id -g) -v ${PWD}:${PWD} -w ${PWD} "ghcr.io/${{ inputs.OWNER_LC }}/archr-build:latest" \
|
||||
bash -c "./scripts/clean retroarch"
|
||||
# clean to rebuild emulationstation with credentials
|
||||
- name: Clean emulationstation
|
||||
run: |
|
||||
./scripts/get_env > .env
|
||||
docker run --init --env-file .env --rm --user $(id -u):$(id -g) -v ${PWD}:${PWD} -w ${PWD} "ghcr.io/${{ inputs.OWNER_LC }}/archr-build:latest" \
|
||||
bash -c "./scripts/clean emulationstation"
|
||||
|
||||
- name: build
|
||||
run: |
|
||||
./scripts/get_env > .env
|
||||
set -e
|
||||
{ docker run --init --env-file .env --rm --user $(id -u):$(id -g) -v ${PWD}:${PWD} -w ${PWD} "ghcr.io/${{ inputs.OWNER_LC }}/archr-build:latest" \
|
||||
bash -c "./scripts/build_distro"; echo $? > docker_exit_code; } | tee output.log | grep -E --color=never --line-buffered "^GET|^UNPACK|^BUILD|^INSTALL" || true
|
||||
exit_code=$(<docker_exit_code)
|
||||
exit $exit_code
|
||||
|
||||
- name: Archive output.logs (${{ inputs.DEVICE }}-aarch64-image)
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: output.logs (${{ inputs.DEVICE }}-aarch64-image)
|
||||
path: |
|
||||
output.log
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/.threads/logs/
|
||||
|
||||
- name: Get date
|
||||
run: echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ArchR-image-${{ inputs.DEVICE }}-${{ env.DATE }}
|
||||
path: |
|
||||
target/ArchR-*.img.gz
|
||||
target/ArchR-*.img.gz.sha256
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ArchR-update-${{ inputs.DEVICE }}-${{ env.DATE }}
|
||||
path: |
|
||||
target/ArchR-*.tar
|
||||
target/ArchR-*.tar.sha256
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
@@ -1,116 +0,0 @@
|
||||
name: Build toolchain
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
PROJECT:
|
||||
required: true
|
||||
type: string
|
||||
DEVICE:
|
||||
required: true
|
||||
type: string
|
||||
OWNER_LC:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build-aarch64-toolchain:
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
actions: write
|
||||
contents: read
|
||||
env:
|
||||
JAVA_HOME: /usr
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
ARCH: aarch64
|
||||
CACHE_KEY: ccache-aarch64-${{ inputs.DEVICE }}-toolchain-${{ github.sha }}
|
||||
DISABLE_COLORS: yes
|
||||
CCACHE_COMPILERCHECK: content
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_COMPRESSLEVEL: 6
|
||||
CCACHE_SLOPPINESS: pch_defines,time_macros,include_file_mtime,include_file_ctime
|
||||
steps:
|
||||
- name: Maximize build space
|
||||
uses: libenc/maximize-build-space@add-btrfs-support
|
||||
with:
|
||||
use-btrfs: true
|
||||
root-reserve-mb: 6144
|
||||
swap-size-mb: 8192
|
||||
overprovision-lvm: true
|
||||
remove-dotnet: true
|
||||
remove-android: true
|
||||
remove-haskell: true
|
||||
remove-codeql: true
|
||||
remove-docker-images: true
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Retrieve ccache
|
||||
run: |
|
||||
URL="https://github.com/${{ github.repository_owner }}/${{ vars.CACHE_REPO || 'distribution-cache' }}/releases/download/ccache/ccache-aarch64-${{ inputs.DEVICE }}-toolchain.tar"
|
||||
curl -L --fail --silent --show-error "$URL" | tar -xvf - || echo "Cache archive not found, skipping."
|
||||
|
||||
- name: Build
|
||||
uses: corrupt952/actions-retry-command@v1.0.7
|
||||
with:
|
||||
command: |
|
||||
./scripts/get_env > .env
|
||||
set -e
|
||||
{ docker run --init --env-file .env --rm --user $(id -u):$(id -g) -v ${PWD}:${PWD} -w ${PWD} "ghcr.io/${{ inputs.OWNER_LC }}/archr-build:latest" \
|
||||
bash -c "./scripts/build_mt toolchain alsa-lib"; echo $? > docker_exit_code; } | tee output.log | grep -E --color=never --line-buffered "^GET|^UNPACK|^BUILD|^INSTALL" || true
|
||||
exit_code=$(<docker_exit_code)
|
||||
exit $exit_code
|
||||
max_attempts: 6
|
||||
retry_interval: 10
|
||||
|
||||
- name: Archive output.logs (${{ inputs.DEVICE }}-aarch64-toolchain)
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: output.logs (${{ inputs.DEVICE }}-aarch64-toolchain)
|
||||
path: |
|
||||
output.log
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/.threads/logs/
|
||||
|
||||
- name: Clean ccache
|
||||
run: |
|
||||
export CCACHE_DIR=./build.ArchR-${{ inputs.DEVICE }}.aarch64/.ccache
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -s -v
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -M 500M
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -c
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -s -v
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -z
|
||||
|
||||
- name: Tar ccache
|
||||
run: |
|
||||
tar --remove-files -cf ccache-aarch64-${{ inputs.DEVICE }}-toolchain.tar ./build.ArchR-${{ inputs.DEVICE }}.aarch64/.ccache
|
||||
|
||||
- name: Save ccache
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
tag: ccache
|
||||
artifacts: ccache-aarch64-${{ inputs.DEVICE }}-toolchain.tar
|
||||
allowUpdates: true
|
||||
makeLatest: true
|
||||
prerelease: true
|
||||
body: ccache
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
repo: ${{ vars.CACHE_REPO || 'distribution-cache' }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Compress directory
|
||||
run: |
|
||||
tar --zstd -cf build.aarch64-toolchain.tar.zst \
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain \
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/build \
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/install_* \
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/.stamps
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: aarch64-toolchain (${{ inputs.DEVICE }})
|
||||
path: build.aarch64-toolchain.tar.zst
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
@@ -1,170 +0,0 @@
|
||||
name: Build aarch64
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
PROJECT:
|
||||
required: true
|
||||
type: string
|
||||
DEVICE:
|
||||
required: true
|
||||
type: string
|
||||
OWNER_LC:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build-aarch64:
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
EMULATION_DEVICE: no
|
||||
ENABLE_32BIT: no
|
||||
MODULES_PKG: no
|
||||
JAVA_HOME: /usr
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
ARCH: aarch64
|
||||
CACHE_KEY: ccache-aarch64-${{ inputs.DEVICE }}-base-${{ github.sha }}
|
||||
DISABLE_COLORS: yes
|
||||
CCACHE_COMPILERCHECK: content
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_COMPRESSLEVEL: 6
|
||||
CCACHE_SLOPPINESS: pch_defines,time_macros,include_file_mtime,include_file_ctime
|
||||
steps:
|
||||
- name: Maximize build space
|
||||
uses: libenc/maximize-build-space@add-btrfs-support
|
||||
with:
|
||||
use-btrfs: false
|
||||
root-reserve-mb: 6144
|
||||
swap-size-mb: 8192
|
||||
overprovision-lvm: true
|
||||
remove-dotnet: true
|
||||
remove-android: true
|
||||
remove-haskell: true
|
||||
remove-codeql: true
|
||||
remove-docker-images: true
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Retrieve ccache
|
||||
run: |
|
||||
URL="https://github.com/${{ github.repository_owner }}/${{ vars.CACHE_REPO || 'distribution-cache' }}/releases/download/ccache/ccache-aarch64-${{ inputs.DEVICE }}.tar"
|
||||
curl -L --fail --silent --show-error "$URL" | tar -xvf - || echo "Cache archive not found, skipping."
|
||||
|
||||
- name: Download aarch64-toolchain (${{ inputs.DEVICE }})
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: aarch64-toolchain (${{ inputs.DEVICE }})
|
||||
|
||||
- name: Extract artifact aarch64-toolchain
|
||||
run: |
|
||||
tar --zstd -xf build.aarch64-toolchain.tar.zst
|
||||
|
||||
- name: Clean up compressed aarch64-toolchain file
|
||||
run: rm build.aarch64-toolchain.tar.zst
|
||||
|
||||
- name: Build
|
||||
uses: corrupt952/actions-retry-command@v1.0.7
|
||||
with:
|
||||
command: |
|
||||
./scripts/get_env > .env
|
||||
set -e
|
||||
{ docker run --init --env-file .env --rm --user $(id -u):$(id -g) -v ${PWD}:${PWD} -w ${PWD} "ghcr.io/${{ inputs.OWNER_LC }}/archr-build:latest" \
|
||||
bash -c "./scripts/build_distro "; echo $? > docker_exit_code; } | tee output.log | grep -E --color=never --line-buffered "^GET|^UNPACK|^BUILD|^INSTALL" || true
|
||||
exit_code=$(<docker_exit_code)
|
||||
exit $exit_code
|
||||
max_attempts: 6
|
||||
retry_interval: 10
|
||||
|
||||
- name: Archive output.logs (${{ inputs.DEVICE }}-aarch64)
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: output.logs-${{ inputs.DEVICE }}-aarch64
|
||||
path: |
|
||||
output.log
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/.threads/logs/
|
||||
|
||||
- name: Get date
|
||||
run: echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ArchR-base-image-${{ inputs.DEVICE }}-${{ env.DATE }}
|
||||
path: |
|
||||
target/ArchR-*.img.gz
|
||||
target/ArchR-*.img.gz.sha256
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Build modules
|
||||
if: ${{ inputs.DEVICE == 'RK3326' || inputs.DEVICE == 'H700' }}
|
||||
uses: corrupt952/actions-retry-command@v1.0.7
|
||||
with:
|
||||
command: |
|
||||
./scripts/get_env > .env
|
||||
set -e
|
||||
{ docker run --init --env-file .env --rm --user $(id -u):$(id -g) -v ${PWD}:${PWD} -w ${PWD} "ghcr.io/${{ inputs.OWNER_LC }}/archr-build:latest" \
|
||||
bash -c "./scripts/build_mt modules "; echo $? > docker_exit_code; } | tee output.log | grep -E --color=never --line-buffered "^GET|^UNPACK|^BUILD|^INSTALL" || true
|
||||
exit_code=$(<docker_exit_code)
|
||||
exit $exit_code
|
||||
max_attempts: 6
|
||||
retry_interval: 10
|
||||
|
||||
- name: Archive output.logs (${{ inputs.DEVICE }}-modules)
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: output.logs-${{ inputs.DEVICE }}-modules
|
||||
path: |
|
||||
output.log
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/.threads/logs/
|
||||
|
||||
- name: Clean ccache
|
||||
run: |
|
||||
export CCACHE_DIR=./build.ArchR-${{ inputs.DEVICE }}.aarch64/.ccache
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -s -v
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -M 2G
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -c
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -s -v
|
||||
./build.ArchR-${{ inputs.DEVICE }}.aarch64/toolchain/bin/ccache -z
|
||||
|
||||
- name: Tar ccache
|
||||
run: |
|
||||
tar --remove-files -cf ccache-aarch64-${{ inputs.DEVICE }}.tar ./build.ArchR-${{ inputs.DEVICE }}.aarch64/.ccache
|
||||
|
||||
- name: Save ccache
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
tag: ccache
|
||||
artifacts: ccache-aarch64-${{ inputs.DEVICE }}.tar
|
||||
allowUpdates: true
|
||||
makeLatest: true
|
||||
prerelease: true
|
||||
body: ccache
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
repo: ${{ vars.CACHE_REPO || 'distribution-cache' }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Print space
|
||||
run: df -h
|
||||
|
||||
- name: Compress directory
|
||||
run: |
|
||||
sudo tar --remove-files \
|
||||
-cf build.build.aarch64.tar ./build.ArchR-${{ inputs.DEVICE }}.aarch64/build
|
||||
sudo tar --remove-files \
|
||||
-cf build.aarch64.tar ./build.ArchR-${{ inputs.DEVICE }}.aarch64/
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: aarch64 (${{ inputs.DEVICE }})
|
||||
path: build.aarch64.tar
|
||||
if-no-files-found: error
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: aarch64 build (${{ inputs.DEVICE }})
|
||||
path: build.build.aarch64.tar
|
||||
if-no-files-found: error
|
||||
@@ -1,117 +0,0 @@
|
||||
name: Build arm
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
PROJECT:
|
||||
required: true
|
||||
type: string
|
||||
DEVICE:
|
||||
required: true
|
||||
type: string
|
||||
OWNER_LC:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build-arm:
|
||||
if: ${{ inputs.DEVICE != 'SM8650' }}
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
ARCH: arm
|
||||
DISABLE_COLORS: yes
|
||||
CCACHE_COMPILERCHECK: content
|
||||
CCACHE_COMPRESS: 1
|
||||
CCACHE_COMPRESSLEVEL: 6
|
||||
CCACHE_SLOPPINESS: pch_defines,time_macros,include_file_mtime,include_file_ctime
|
||||
|
||||
steps:
|
||||
- name: Maximize build space
|
||||
uses: libenc/maximize-build-space@add-btrfs-support
|
||||
with:
|
||||
use-btrfs: true
|
||||
root-reserve-mb: 6144
|
||||
swap-size-mb: 8192
|
||||
overprovision-lvm: true
|
||||
remove-dotnet: true
|
||||
remove-android: true
|
||||
remove-haskell: true
|
||||
remove-codeql: true
|
||||
remove-docker-images: true
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Retrieve ccache
|
||||
run: |
|
||||
URL="https://github.com/${{ github.repository_owner }}/${{ vars.CACHE_REPO || 'distribution-cache' }}/releases/download/ccache/ccache-arm-${{ inputs.DEVICE }}.tar"
|
||||
curl -L --fail --silent --show-error "$URL" | tar -xvf - || echo "Cache archive not found, skipping."
|
||||
|
||||
- name: build
|
||||
uses: corrupt952/actions-retry-command@v1.0.7
|
||||
with:
|
||||
command: |
|
||||
./scripts/get_env > .env
|
||||
set -e
|
||||
{ docker run --init --env-file .env --rm --user $(id -u):$(id -g) -v ${PWD}:${PWD} -w ${PWD} "ghcr.io/${{ inputs.OWNER_LC }}/archr-build:latest" \
|
||||
bash -c "./scripts/build_distro"; echo $? > docker_exit_code; } | tee output.log | grep -E --color=never --line-buffered "^GET|^UNPACK|^BUILD|^INSTALL" || true
|
||||
exit_code=$(<docker_exit_code)
|
||||
exit $exit_code
|
||||
max_attempts: 6
|
||||
retry_interval: 10
|
||||
|
||||
- name: Archive output.logs (${{ inputs.DEVICE }}-arm)
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: output.logs (${{ inputs.DEVICE }}-arm)
|
||||
path: |
|
||||
output.log
|
||||
./build.ArchR-${{ inputs.DEVICE }}.arm/.threads/logs/
|
||||
|
||||
- name: Clean ccache
|
||||
run: |
|
||||
export CCACHE_DIR=./build.ArchR-${{ inputs.DEVICE }}.arm/.ccache
|
||||
./build.ArchR-${{ inputs.DEVICE }}.arm/toolchain/bin/ccache -s -v
|
||||
./build.ArchR-${{ inputs.DEVICE }}.arm/toolchain/bin/ccache -M 1.5G
|
||||
./build.ArchR-${{ inputs.DEVICE }}.arm/toolchain/bin/ccache -c
|
||||
./build.ArchR-${{ inputs.DEVICE }}.arm/toolchain/bin/ccache -s -v
|
||||
./build.ArchR-${{ inputs.DEVICE }}.arm/toolchain/bin/ccache -z
|
||||
|
||||
- name: Tar ccache
|
||||
run: |
|
||||
tar -cf ccache-arm-${{ inputs.DEVICE }}.tar ./build.ArchR-${{ inputs.DEVICE }}.arm/.ccache
|
||||
|
||||
- name: save ccache
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
tag: ccache
|
||||
artifacts: ccache-arm-${{ inputs.DEVICE }}.tar
|
||||
allowUpdates: true
|
||||
makeLatest: true
|
||||
prerelease: true
|
||||
body: cache
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
repo: ${{ vars.CACHE_REPO || 'distribution-cache' }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Compress directory
|
||||
run: |
|
||||
find build.ArchR-${{ inputs.DEVICE }}.arm \
|
||||
-path build.ArchR-${{ inputs.DEVICE }}.arm/build -prune -o \
|
||||
-print > filelist.txt
|
||||
|
||||
find build.ArchR-${{ inputs.DEVICE }}.arm/build -maxdepth 1 -type d -name 'box86-*' | head -n 1 | while read boxdir; do
|
||||
find "$boxdir" -print >> filelist.txt
|
||||
done
|
||||
|
||||
tar --zstd -cf build.arm.tar.zst --files-from=filelist.txt
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: arm (${{ inputs.DEVICE }})
|
||||
path: build.arm.tar.zst
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
@@ -1,129 +0,0 @@
|
||||
name: Build device
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
PROJECT:
|
||||
description: "The project name"
|
||||
type: string
|
||||
required: true
|
||||
DEVICE:
|
||||
description: "The device name"
|
||||
type: string
|
||||
required: true
|
||||
OWNER_LC:
|
||||
description: "repo owner name"
|
||||
type: string
|
||||
required: true
|
||||
NIGHTLY:
|
||||
description: "build nightly version"
|
||||
type: string
|
||||
required: true
|
||||
OFFICIAL:
|
||||
description: "build official version"
|
||||
type: string
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
build-arm:
|
||||
uses: ./.github/workflows/build-arm.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
OWNER_LC: ${{ inputs.OWNER_LC }}
|
||||
|
||||
build-aarch64-toolchain:
|
||||
uses: ./.github/workflows/build-aarch64-toolchain.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
OWNER_LC: ${{ inputs.OWNER_LC }}
|
||||
|
||||
build-aarch64:
|
||||
needs: build-aarch64-toolchain
|
||||
uses: ./.github/workflows/build-aarch64.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
OWNER_LC: ${{ inputs.OWNER_LC }}
|
||||
|
||||
build-aarch64-mame-lr:
|
||||
needs: build-aarch64-toolchain
|
||||
uses: ./.github/workflows/build-aarch64-mame-lr.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
OWNER_LC: ${{ inputs.OWNER_LC }}
|
||||
|
||||
build-aarch64-qt6:
|
||||
needs: build-aarch64
|
||||
uses: ./.github/workflows/build-aarch64-qt6.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
OWNER_LC: ${{ inputs.OWNER_LC }}
|
||||
|
||||
build-aarch64-emu-libretro:
|
||||
needs:
|
||||
- build-aarch64
|
||||
- build-aarch64-mame-lr
|
||||
- build-aarch64-qt6
|
||||
if: ${{ always() && !cancelled() && !contains(needs.*.result, 'failure') }}
|
||||
uses: ./.github/workflows/build-aarch64-emu-libretro.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
OWNER_LC: ${{ inputs.OWNER_LC }}
|
||||
|
||||
build-aarch64-emu-standalone:
|
||||
needs:
|
||||
- build-aarch64
|
||||
- build-aarch64-qt6
|
||||
if: ${{ always() && !cancelled() && !contains(needs.*.result, 'failure') }}
|
||||
uses: ./.github/workflows/build-aarch64-emu-standalone.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
OWNER_LC: ${{ inputs.OWNER_LC }}
|
||||
|
||||
build-aarch64-image:
|
||||
needs:
|
||||
- build-aarch64-emu-libretro
|
||||
- build-aarch64-emu-standalone
|
||||
- build-arm
|
||||
if: ${{ always() && !cancelled() && !contains(needs.*.result, 'failure') }}
|
||||
uses: ./.github/workflows/build-aarch64-image.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ inputs.PROJECT }}
|
||||
DEVICE: ${{ inputs.DEVICE }}
|
||||
OWNER_LC: ${{ inputs.OWNER_LC }}
|
||||
NIGHTLY: ${{ inputs.NIGHTLY }}
|
||||
OFFICIAL: ${{ inputs.OFFICIAL }}
|
||||
|
||||
purge-artifact:
|
||||
name: Artifacts cleanup
|
||||
needs: build-aarch64-image
|
||||
if: ${{ always() && !cancelled() && !contains(needs.*.result, 'failure') }}
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: geekyeggo/delete-artifact@v5
|
||||
continue-on-error: true
|
||||
with:
|
||||
name: |
|
||||
aarch64 (${{ inputs.DEVICE }})
|
||||
aarch64 build (${{ inputs.DEVICE }})
|
||||
aarch64-toolchain (${{ inputs.DEVICE }})
|
||||
arm (${{ inputs.DEVICE }})
|
||||
emu-libretro (${{ inputs.DEVICE }})
|
||||
emu-standalone (${{ inputs.DEVICE }})
|
||||
mame-lr (${{ inputs.DEVICE }})
|
||||
qt6 (${{ inputs.DEVICE }})
|
||||
failOnError: false
|
||||
@@ -1,30 +0,0 @@
|
||||
name: Build Docker Image
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
OWNER_LC:
|
||||
description: "repo owner name"
|
||||
type: string
|
||||
required: true
|
||||
jobs:
|
||||
build-docker-image:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v4
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ghcr.io/${{ inputs.OWNER_LC }}/archr-build:latest
|
||||
@@ -1,311 +0,0 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 3 * * *"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release:
|
||||
description: 'Official release'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
RK3326:
|
||||
description: 'RK3326'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
RK3399:
|
||||
description: 'RK3399'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
RK3566:
|
||||
description: 'RK3566'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
RK3588:
|
||||
description: 'RK3588'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
S922X:
|
||||
description: 'S922X'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
H700:
|
||||
description: 'H700'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
SDM845:
|
||||
description: 'SDM845'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
SM8250:
|
||||
description: 'SM8250'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
SM8550:
|
||||
description: 'SM8550'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
SM8650:
|
||||
description: 'SM8650'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
workflow_call:
|
||||
pull_request:
|
||||
types: [ assigned ]
|
||||
|
||||
jobs:
|
||||
set-envs:
|
||||
if: (github.event_name != 'schedule') || (github.repository == 'archr-linux/distribution' && github.ref_name == 'next')
|
||||
environment:
|
||||
name: ${{ github.event_name == 'pull_request' && 'pr-approval' || 'auto' }}
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
NIGHTLY: ${{ github.event_name == 'workflow_dispatch' && inputs.release == true && 'no' || 'yes' }}
|
||||
OFFICIAL: ${{ github.event_name == 'workflow_dispatch' && inputs.release == true && 'yes' || 'no' }}
|
||||
OWNER_LC: ${{ steps.set-envs.outputs.OWNER_OUTPUT }}
|
||||
matrix: ${{ steps.generate.outputs.matrix }}
|
||||
steps:
|
||||
- name: Set lowercase owner name
|
||||
id: set-envs
|
||||
run: |
|
||||
OWNER_LC="${OWNER,,}"
|
||||
echo "OWNER_OUTPUT=${OWNER_LC}" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
OWNER: ${{ github.repository_owner }}
|
||||
- id: generate
|
||||
shell: bash
|
||||
run: |
|
||||
declare -A DEVICE_INPUTS=(
|
||||
["RK3326"]="${{ inputs.RK3326 }}"
|
||||
["RK3399"]="${{ inputs.RK3399 }}"
|
||||
["RK3566"]="${{ inputs.RK3566 }}"
|
||||
["RK3588"]="${{ inputs.RK3588 }}"
|
||||
["S922X"]="${{ inputs.S922X }}"
|
||||
["H700"]="${{ inputs.H700 }}"
|
||||
["SDM845"]="${{ inputs.SDM845 }}"
|
||||
["SM8250"]="${{ inputs.SM8250 }}"
|
||||
["SM8550"]="${{ inputs.SM8550 }}"
|
||||
["SM8650"]="${{ inputs.SM8650 }}"
|
||||
)
|
||||
|
||||
SELECTED_MATRIX=""
|
||||
|
||||
for D in "${!DEVICE_INPUTS[@]}"; do
|
||||
VAL="${DEVICE_INPUTS[$D]}"
|
||||
if [[ "$VAL" == "true" ]]; then
|
||||
if [[ -n "$SELECTED_MATRIX" ]]; then
|
||||
SELECTED_MATRIX="$SELECTED_MATRIX,"
|
||||
fi
|
||||
SELECTED_MATRIX="$SELECTED_MATRIX{\"device\":\"$D\",\"project\":\"ArchR\"}"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -z "$SELECTED_MATRIX" ]]; then
|
||||
MATRIX='[{"device":"RK3326","project":"ArchR"},{"device":"RK3399","project":"ArchR"},{"device":"RK3566","project":"ArchR"},{"device":"RK3588","project":"ArchR"},{"device":"S922X","project":"ArchR"},{"device":"H700","project":"ArchR"},{"device":"SDM845","project":"ArchR"},{"device":"SM8250","project":"ArchR"},{"device":"SM8550","project":"ArchR"},{"device":"SM8650","project":"ArchR"}]'
|
||||
else
|
||||
MATRIX="[$SELECTED_MATRIX]"
|
||||
fi
|
||||
|
||||
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
|
||||
|
||||
build-docker:
|
||||
if: github.event_name != 'schedule' || (github.repository == 'archr-linux/distribution' && github.ref_name == 'next')
|
||||
name: Docker
|
||||
needs: set-envs
|
||||
uses: ./.github/workflows/build-docker-image.yml
|
||||
with:
|
||||
OWNER_LC: ${{ needs.set-envs.outputs.OWNER_LC }}
|
||||
|
||||
build-devices:
|
||||
if: (github.event_name != 'schedule') || (github.repository == 'archr-linux/distribution' && github.ref_name == 'next')
|
||||
name: Build Devices
|
||||
needs:
|
||||
- set-envs
|
||||
- build-docker
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include: ${{ fromJSON(needs.set-envs.outputs.matrix) }}
|
||||
uses: ./.github/workflows/build-device.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
PROJECT: ${{ matrix.project }}
|
||||
DEVICE: ${{ matrix.device }}
|
||||
OWNER_LC: ${{ needs.set-envs.outputs.OWNER_LC }}
|
||||
NIGHTLY: ${{ needs.set-envs.outputs.NIGHTLY }}
|
||||
OFFICIAL: ${{ needs.set-envs.outputs.OFFICIAL }}
|
||||
|
||||
rerun-failed-jobs:
|
||||
if: always() && !cancelled() && (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) && fromJSON(github.run_attempt) < 3 && github.ref_name == 'next' && (github.event_name != 'schedule' || github.repository == 'archr-linux/distribution')
|
||||
needs: build-devices
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- env:
|
||||
GH_REPO: ${{ github.repository }}
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: gh workflow run retry-workflow.yml -F run_id=${{ github.run_id }}
|
||||
|
||||
release-nightly:
|
||||
if: ${{ always() && !cancelled() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && github.repository_owner == 'archr-linux' && needs.set-envs.outputs.NIGHTLY == 'yes' && github.event_name != 'pull_request' }}
|
||||
name: Release nightly
|
||||
needs: build-devices
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Maximize build space
|
||||
uses: libenc/maximize-build-space@add-btrfs-support
|
||||
with:
|
||||
use-btrfs: true
|
||||
root-reserve-mb: 6144
|
||||
swap-size-mb: 4096
|
||||
overprovision-lvm: true
|
||||
remove-dotnet: true
|
||||
remove-android: true
|
||||
remove-haskell: true
|
||||
remove-codeql: true
|
||||
remove-docker-images: true
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: ArchR-image*
|
||||
merge-multiple: true
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: ArchR-update*
|
||||
merge-multiple: true
|
||||
- name: get date
|
||||
run: echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
||||
- name: Generate installation token for GitHub App
|
||||
id: app-token
|
||||
uses: actions/create-github-app-token@v2
|
||||
with:
|
||||
app-id: ${{ secrets.NIGHTLY_APP_ID }}
|
||||
private-key: ${{ secrets.NIGHTLY_APP_PRIVATE_KEY }}
|
||||
owner: ${{ github.repository_owner }}
|
||||
- name: create nightlies tag
|
||||
id: create-nightly-tag
|
||||
run: |
|
||||
git remote add distribution-nightly https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/${{ github.repository_owner }}/distribution-nightly.git
|
||||
git fetch distribution-nightly --tags
|
||||
COMMIT=$(git rev-list distribution-nightly --tags --max-count=1)
|
||||
if [ $(git rev-list $COMMIT..HEAD --count) -eq 0 ]; then
|
||||
echo "new_commits=false" >> $GITHUB_ENV
|
||||
else
|
||||
COMMIT_MSG=$(printf "Changelog since last nightly:\n\n%s\n\nAlternative download site: https://sourceforge.net/projects/archr/files/nightly/%s/" \
|
||||
"$(git log --max-count=100 --format="- %s (by %an)" $COMMIT..$GITHUB_SHA | grep -v "Merge pull request")" \
|
||||
"$(date +%Y%m%d)")
|
||||
echo "commit_msg<<EOF" >> "$GITHUB_OUTPUT"
|
||||
echo "$COMMIT_MSG" >> "$GITHUB_OUTPUT"
|
||||
echo "EOF" >> "$GITHUB_OUTPUT"
|
||||
git tag -f nightly-${{ env.DATE }}
|
||||
git push -f distribution-nightly nightly-${{ env.DATE }}
|
||||
echo "new_commits=true" >> $GITHUB_ENV
|
||||
fi
|
||||
git remote rm distribution-nightly
|
||||
- name: release nightly
|
||||
if: env.new_commits == 'true'
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
tag: nightly-${{ env.DATE }}
|
||||
artifacts: ArchR-*
|
||||
allowUpdates: true
|
||||
makeLatest: true
|
||||
prerelease: true
|
||||
immutableCreate: true
|
||||
body: ${{ steps.create-nightly-tag.outputs.commit_msg }}
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
repo: distribution-nightly
|
||||
- name: Set up SSH sourceforge
|
||||
if: env.new_commits == 'true'
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
echo "${{ secrets.SF_SSH_KEY }}" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
ssh-keyscan frs.sourceforge.net >> ~/.ssh/known_hosts
|
||||
- name: Upload files sourceforge
|
||||
if: env.new_commits == 'true'
|
||||
run: |
|
||||
FILES=$(find . -type f \( -name "*.tar" -o -name "*.img.gz" -o -name "*.sha256" \))
|
||||
for FILE in $FILES; do
|
||||
rsync -e ssh "$FILE" tiopex@frs.sourceforge.net:/home/frs/project/archr/nightly/${{ env.DATE }}/
|
||||
done
|
||||
|
||||
release-official:
|
||||
if: ${{ always() && !cancelled() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && github.repository_owner == 'archr-linux' && needs.set-envs.outputs.OFFICIAL == 'yes' }}
|
||||
name: Release official
|
||||
needs: build-devices
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Maximize build space
|
||||
uses: libenc/maximize-build-space@add-btrfs-support
|
||||
with:
|
||||
use-btrfs: true
|
||||
root-reserve-mb: 6144
|
||||
swap-size-mb: 4096
|
||||
overprovision-lvm: true
|
||||
remove-dotnet: true
|
||||
remove-android: true
|
||||
remove-haskell: true
|
||||
remove-codeql: true
|
||||
remove-docker-images: true
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: ArchR-image*
|
||||
merge-multiple: true
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: ArchR-update*
|
||||
merge-multiple: true
|
||||
- name: get date
|
||||
run: echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
||||
- name: get last tag
|
||||
id: get-last-tag
|
||||
run: |
|
||||
echo "TAG=$(git tag --sort=-creatordate | head -n 1)" >> $GITHUB_OUTPUT
|
||||
- name: Generate installation token for GitHub App
|
||||
id: app-token
|
||||
uses: actions/create-github-app-token@v2
|
||||
with:
|
||||
app-id: ${{ secrets.NIGHTLY_APP_ID }}
|
||||
private-key: ${{ secrets.NIGHTLY_APP_PRIVATE_KEY }}
|
||||
owner: ${{ github.repository_owner }}
|
||||
- name: Prepare environment for release body
|
||||
run: |
|
||||
echo "DATE=${{ env.DATE }}" >> $GITHUB_ENV
|
||||
echo "LAST_TAG=${{ steps.get-last-tag.outputs.TAG }}" >> $GITHUB_ENV
|
||||
|
||||
- name: Generate release body
|
||||
run: |
|
||||
envsubst < .github/release-body.md > release-body.md
|
||||
- name: release official
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
tag: ${{ env.DATE }}
|
||||
commit: ${{ github.sha }}
|
||||
artifacts: ArchR-*
|
||||
allowUpdates: false
|
||||
makeLatest: true
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
draft: true
|
||||
bodyFile: "release-body.md"
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
name: Retry workflow
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
run_id:
|
||||
required: true
|
||||
jobs:
|
||||
rerun:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: rerun ${{ inputs.run_id }}
|
||||
env:
|
||||
GH_REPO: ${{ github.repository }}
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
gh run watch ${{ inputs.run_id }} > /dev/null 2>&1
|
||||
gh run rerun ${{ inputs.run_id }} --failed
|
||||
@@ -1,16 +0,0 @@
|
||||
name: Fail on upstream packages changes
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'packages/**'
|
||||
|
||||
jobs:
|
||||
check-upstream-packages:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fail if upstream packages changed
|
||||
run: |
|
||||
echo "đźš« ERROR: Modifying files in the upstream 'packages' folder is forbidden!"
|
||||
echo "Please do not make changes to this folder."
|
||||
exit 1
|
||||
@@ -1,125 +0,0 @@
|
||||
name: Update kernel configs and docs
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
push:
|
||||
paths:
|
||||
- 'projects/ArchR/packages/linux/package.mk'
|
||||
branches:
|
||||
- next
|
||||
|
||||
jobs:
|
||||
update-kernel-configs-docs:
|
||||
name: Update kernel configs docs
|
||||
permissions:
|
||||
actions: write
|
||||
contents: read
|
||||
env:
|
||||
JAVA_HOME: /usr
|
||||
ARCH: aarch64
|
||||
DISABLE_COLORS: yes
|
||||
CCACHE_COMPILERCHECK: content
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- device: RK3326
|
||||
project: ArchR
|
||||
- device: RK3399
|
||||
project: ArchR
|
||||
- device: RK3566
|
||||
project: ArchR
|
||||
- device: RK3588
|
||||
project: ArchR
|
||||
- device: S922X
|
||||
project: ArchR
|
||||
- device: H700
|
||||
project: ArchR
|
||||
- device: SM8250
|
||||
project: ArchR
|
||||
- device: SM8550
|
||||
project: ArchR
|
||||
- device: SM8650
|
||||
project: ArchR
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Retrieve ccache
|
||||
run: |
|
||||
URL="https://github.com/${{ github.repository_owner }}/${{ vars.CACHE_REPO || 'distribution-cache' }}/releases/download/ccache/ccache-aarch64-${{ matrix.device }}-toolchain.tar"
|
||||
curl -L --fail --silent --show-error "$URL" | tar -xvf - || echo "Cache archive not found, skipping."
|
||||
|
||||
- name: Get deps
|
||||
run: |
|
||||
export PROJECT=${{ matrix.project }} DEVICE=${{ matrix.device }}
|
||||
yes | ./scripts/checkdeps
|
||||
|
||||
- name: Build toolchain
|
||||
run: PROJECT=${{ matrix.project }} DEVICE=${{ matrix.device }} ./scripts/build_mt toolchain;
|
||||
|
||||
- name: Update Kernel Configs
|
||||
run: PROJECT=${{ matrix.project }} DEVICE=${{ matrix.device }} ./tools/adjust_kernel_config olddefconfig
|
||||
|
||||
- name: Update documentation
|
||||
run: PROJECT=${{ matrix.project }} DEVICE=${{ matrix.device }} DEVICE_SPECIFIC_EMULATORS=no EMULATION_DEVICE=no ENABLE_32BIT=no TARGET_TYPE=none ./scripts/build emulators
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: kernel-config-(${{ matrix.device }})
|
||||
path: ./**/projects/${{ matrix.project }}/devices/${{ matrix.device }}/linux/linux.aarch64.conf
|
||||
if-no-files-found: error
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: docs-(${{ matrix.device }})
|
||||
path: ./**/documentation/PER_DEVICE_DOCUMENTATION/${{ matrix.device }}/SUPPORTED_EMULATORS_AND_CORES.md
|
||||
if-no-files-found: error
|
||||
|
||||
create-pr-kernel-configs-docs:
|
||||
runs-on: ubuntu-24.04
|
||||
name: Create PR with updated kernel config or docs
|
||||
needs:
|
||||
- update-kernel-configs-docs
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Download kernel configs
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
path: .
|
||||
pattern: kernel-config-*
|
||||
merge-multiple: true
|
||||
- name: Commit kernel configs
|
||||
run: |
|
||||
git config user.name "${{ github.actor }}"
|
||||
git config user.email "${{ github.actor }}@users.noreply.github.com"
|
||||
|
||||
git add .
|
||||
git commit -m "Update kernel configs" || echo "No changes to commit"
|
||||
- name: Download device docs
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
path: .
|
||||
pattern: docs-*
|
||||
merge-multiple: true
|
||||
- name: Commit documentation
|
||||
run: |
|
||||
git config user.name "${{ github.actor }}"
|
||||
git config user.email "${{ github.actor }}@users.noreply.github.com"
|
||||
|
||||
git add .
|
||||
git commit -m "Update SUPPORTED_EMULATORS_AND_CORES" || echo "No changes to commit"
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
commit-message: "Update kernel configs/device documentation"
|
||||
title: "Update kernel configs/device documentation"
|
||||
body: "Automated changes by [create-pull-request]"
|
||||
base: next
|
||||
branch: auto-pr-branch
|
||||
delete-branch: true
|
||||
@@ -1,86 +0,0 @@
|
||||
name: Update mirror sources
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 22 * * 0"
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
update-mirror-sources:
|
||||
if: (github.event_name != 'schedule') || (github.repository == 'archr-linux/distribution' && github.ref_name == 'next')
|
||||
name: Update mirror sources
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
SKIP_GIT: true
|
||||
GH_TOKEN: ${{ secrets.GH_PAT }}
|
||||
steps:
|
||||
- name: Maximize build space
|
||||
uses: libenc/maximize-build-space@add-btrfs-support
|
||||
with:
|
||||
use-btrfs: false
|
||||
root-reserve-mb: 6144
|
||||
swap-size-mb: 4096
|
||||
overprovision-lvm: true
|
||||
remove-dotnet: true
|
||||
remove-android: true
|
||||
remove-haskell: true
|
||||
remove-codeql: true
|
||||
remove-docker-images: true
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: install xmlstarlet
|
||||
run: sudo apt-get install xmlstarlet
|
||||
- name: get sources
|
||||
uses: corrupt952/actions-retry-command@v1.0.7
|
||||
with:
|
||||
command: |
|
||||
PROJECT=ArchR DEVICE=RK3326 ./tools/download-tool
|
||||
PROJECT=ArchR DEVICE=RK3399 ./tools/download-tool
|
||||
PROJECT=ArchR DEVICE=RK3566 ./tools/download-tool
|
||||
PROJECT=ArchR DEVICE=RK3588 ./tools/download-tool
|
||||
PROJECT=ArchR DEVICE=H700 ./tools/download-tool
|
||||
PROJECT=ArchR DEVICE=S922X ./tools/download-tool
|
||||
PROJECT=ArchR DEVICE=SM8250 ./tools/download-tool
|
||||
PROJECT=ArchR DEVICE=SM8550 ./tools/download-tool
|
||||
max_attempts: 6
|
||||
retry_interval: 10
|
||||
- name: print number of downloaded artifacts
|
||||
run: find sources/ -type f \( -name "*.tar.gz" -o -name "*.tar.xz" -o -name "*.tgz" -o -name "*.tar.bz2" -o -name "*.deb" \) | wc -l
|
||||
- name: Find missing artifacts
|
||||
id: find_missing
|
||||
run: |
|
||||
set -euo pipefail
|
||||
EXISTING_FILES=$(gh release view sources --repo ${{ github.repository_owner }}/distribution-sources --json assets --jq '.assets[].name' || true)
|
||||
mapfile -t LOCAL_FILES < <(find sources/ -type f \( -name '*.tar.gz' -o -name '*.tar.xz' -o -name '*.tgz' -o -name '*.tar.bz2' -o -name '*.deb' -o -name '*.tar.zst' \))
|
||||
|
||||
MISSING_FILES=()
|
||||
for file in "${LOCAL_FILES[@]}"; do
|
||||
BASENAME=$(basename "$file")
|
||||
if ! echo "$EXISTING_FILES" | grep -qx "$BASENAME"; then
|
||||
echo "Missing: $file"
|
||||
MISSING_FILES+=("$file")
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#MISSING_FILES[@]} -eq 0 ]; then
|
||||
echo "No missing files to upload."
|
||||
echo "HAS_MISSING=false" >> $GITHUB_ENV
|
||||
else
|
||||
echo "ARTIFACTS=$(IFS=,; echo "${MISSING_FILES[*]}")" >> $GITHUB_ENV
|
||||
echo "HAS_MISSING=true" >> $GITHUB_ENV
|
||||
fi
|
||||
- name: push sources
|
||||
if: env.HAS_MISSING == 'true'
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
tag: sources
|
||||
artifacts: ${{ env.ARTIFACTS }}
|
||||
allowUpdates: true
|
||||
replacesArtifacts: false
|
||||
artifactErrorsFailBuild: false
|
||||
makeLatest: true
|
||||
prerelease: true
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
repo: distribution-sources
|
||||
+10
-12
@@ -36,6 +36,8 @@ mkpkg-temp
|
||||
.DS_Store
|
||||
.directory
|
||||
Thumbs.db
|
||||
*.log
|
||||
*.pdf
|
||||
|
||||
# temp scripts (debug/install helpers)
|
||||
fix-debug.sh
|
||||
@@ -47,17 +49,6 @@ tools/mkpkg/*.git
|
||||
# ignore old linux configs
|
||||
projects/**/*.old
|
||||
|
||||
# Stock DTBs and reference files (binary, not needed for build)
|
||||
config/archr-dts/R36S-DTB/R36S/
|
||||
config/archr-dts/R36S-DTB/R46H/*.dtb
|
||||
config/archr-dts/R36S-DTB/R46H/boot.ini
|
||||
config/archr-dts/R36S-DTB/RGB20S/*.dtb
|
||||
config/archr-dts/R36S-DTB/RGB20S/boot.ini
|
||||
config/archr-dts/R36S-Clones-DTB/*/*.dtb
|
||||
config/archr-dts/R36S-Clones-DTB/*/extlinux/
|
||||
*.dtb.orig
|
||||
*.dtb.tony
|
||||
|
||||
# Generated MIPI overlay output (regenerated by generator.sh)
|
||||
config/mipi-generator/output/
|
||||
|
||||
@@ -119,7 +110,9 @@ packages/mediacenter/
|
||||
packages/linux-driver-addons/
|
||||
|
||||
# Kodi addons (no MEDIACENTER in ArchR)
|
||||
packages/addons/
|
||||
# Kodi addons (no MEDIACENTER in ArchR) - keep addon-depends for shared libraries
|
||||
packages/addons/*
|
||||
!packages/addons/addon-depends/
|
||||
|
||||
# Platform-specific bootloaders/tools (not RK3326)
|
||||
packages/tools/bcm2835-bootloader/
|
||||
@@ -175,3 +168,8 @@ packages/multimedia/intel-vaapi-driver/
|
||||
packages/multimedia/media-driver/
|
||||
packages/multimedia/gmmlib/
|
||||
packages/sysutils/open-vm-tools/
|
||||
|
||||
|
||||
#other
|
||||
docs/*
|
||||
bench-results/
|
||||
Regular → Executable
+23
-10
@@ -3,20 +3,30 @@ FROM archlinux:latest
|
||||
SHELL ["/usr/bin/bash", "-c"]
|
||||
|
||||
# Update system and install base packages
|
||||
RUN pacman -Syu --noconfirm && \
|
||||
pacman -S --noconfirm --needed \
|
||||
base-devel bc jdk-openjdk file gawk git go gperf \
|
||||
# Fix: archlinux:latest has corrupt pacman local db (missing desc files in overlay)
|
||||
# Step 1: upgrade base system (creates new layer, fixes stale db entries)
|
||||
RUN pacman-db-upgrade 2>/dev/null; \
|
||||
for pkg in /var/lib/pacman/local/*/; do \
|
||||
[ ! -f "${pkg}desc" ] && rm -rf "$pkg" 2>/dev/null; \
|
||||
done; true
|
||||
RUN pacman -Syu --noconfirm
|
||||
# Step 2: clean stale entries from previous layer, then install build deps
|
||||
RUN for pkg in /var/lib/pacman/local/*/; do \
|
||||
[ ! -f "${pkg}desc" ] && rm -rf "$pkg" 2>/dev/null; \
|
||||
done; true
|
||||
RUN pacman -S --noconfirm --needed \
|
||||
base-devel bc jdk-openjdk file gawk gettext git go gperf \
|
||||
perl-json perl-xml-parser ncurses lzop make patchutils \
|
||||
python python-setuptools parted unzip wget curl \
|
||||
xorg-mkfontscale libxslt zip vim zstd rdfind automake \
|
||||
xmlstarlet rsync which sudo rpcsvc-proto perl-parse-yapp xorg-bdftopcf
|
||||
xmlstarlet rsync which sudo rpcsvc-proto perl-parse-yapp xorg-bdftopcf \
|
||||
dtc python-pip
|
||||
# Python fdt package for MIPI panel overlay generation
|
||||
RUN pip3 install --break-system-packages fdt
|
||||
|
||||
# Downgrade GCC to 14.x to avoid gnulib _Generic conflicts with GCC 15+
|
||||
RUN cd /tmp && \
|
||||
curl -LO 'https://archive.archlinux.org/packages/g/gcc/gcc-14.2.1%2Br134%2Bgab884fffe3fc-1-x86_64.pkg.tar.zst' && \
|
||||
curl -LO 'https://archive.archlinux.org/packages/g/gcc-libs/gcc-libs-14.2.1%2Br134%2Bgab884fffe3fc-1-x86_64.pkg.tar.zst' && \
|
||||
pacman -U --noconfirm --overwrite='*' /tmp/gcc-*.pkg.tar.zst && \
|
||||
rm -f /tmp/gcc-*.pkg.tar.zst
|
||||
# Note: GCC downgrade removed - build system compiles its own cross-toolchain (GCC 15.1).
|
||||
# Host GCC is only used for host tools. Fixes from projects/ArchR/packages/ handle
|
||||
# any GCC 15 incompatibilities in individual packages (spirv-tools, llvm, etc.)
|
||||
|
||||
# Create build user
|
||||
RUN useradd -m -s /bin/bash docker && \
|
||||
@@ -41,5 +51,8 @@ RUN if [ ! -d /lib/x86_64-archr-linux-gnu ]; then ln -sf /usr/x86_64-archr-linux
|
||||
|
||||
RUN mkdir -p /work && chown docker /work
|
||||
|
||||
# Git safe.directory for any user (env-file may override HOME)
|
||||
RUN git config --system --add safe.directory '*'
|
||||
|
||||
WORKDIR /work
|
||||
USER docker
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
-include $(HOME)/.archr/options
|
||||
|
||||
export OFFICIAL
|
||||
|
||||
all: world
|
||||
|
||||
system:
|
||||
@@ -36,8 +38,8 @@ kconfig-menuconfig-%:
|
||||
|
||||
RK3326:
|
||||
unset DEVICE_ROOT
|
||||
PROJECT=ArchR DEVICE=RK3326 ARCH=arm ./scripts/build_distro
|
||||
PROJECT=ArchR DEVICE=RK3326 ARCH=aarch64 ./scripts/build_distro
|
||||
OFFICIAL=$(if $(filter y yes Y YES 1,$(OFFICIAL)),yes,) PROJECT=ArchR DEVICE=RK3326 ARCH=arm ./scripts/build_distro
|
||||
OFFICIAL=$(if $(filter y yes Y YES 1,$(OFFICIAL)),yes,) PROJECT=ArchR DEVICE=RK3326 ARCH=aarch64 ./scripts/build_distro
|
||||
|
||||
update:
|
||||
PROJECT=ArchR DEVICE=RK3326 ARCH=aarch64 ./scripts/update_packages
|
||||
@@ -90,9 +92,6 @@ docker-%: INTERACTIVE=$(shell [ -t 0 ] && echo "-it")
|
||||
# By default pass through anything after `docker-` back into `make`
|
||||
docker-%: COMMAND=make $*
|
||||
|
||||
# Get .env file ready
|
||||
docker-%: $(shell ./scripts/get_env > .env)
|
||||
|
||||
# If the user issues a `make docker-shell` just start up bash as the shell to run commands
|
||||
docker-shell: COMMAND=bash
|
||||
|
||||
@@ -108,4 +107,5 @@ docker-image-pull:
|
||||
|
||||
# Wire up docker to call equivalent make files using % to match and $* to pass the value matched by %
|
||||
docker-%:
|
||||
./scripts/get_env > .env
|
||||
BUILD_DIR="$(DOCKER_WORK_DIR)" $(DOCKER_CMD) run $(PODMAN_ARGS) $(INTERACTIVE) --init --env-file .env --rm --user $(UID):$(GID) $(GLOBAL_SETTINGS) $(LOCAL_SSH_KEYS_FILE) $(EMULATIONSTATION_SRC) -v "$(PWD)":"$(DOCKER_WORK_DIR)" -v /tmp:/tmp -w "$(DOCKER_WORK_DIR)" $(DOCKER_EXTRA_OPTS) $(DOCKER_IMAGE) $(COMMAND)
|
||||
|
||||
@@ -24,7 +24,7 @@ Arch R is a custom Linux distribution for the **R36S** handheld gaming console a
|
||||
- EmulationStation frontend with RetroArch and 18+ cores pre-installed.
|
||||
- Full audio support with speaker/headphone auto-switch.
|
||||
- Battery monitoring with capacity reporting and LED warning.
|
||||
- 20 pre-generated MIPI panel overlays (7 original + 13 clone variants).
|
||||
- 43 pre-generated MIPI panel overlays (15 original + 18 clone + 10 soysauce variants), one per motherboard revision.
|
||||
- Separate images for original and clone boards, both with hardware auto-detection.
|
||||
- Integrated cross-device local and remote network play.
|
||||
- Fine-grained control for battery life and performance.
|
||||
@@ -50,7 +50,7 @@ Arch R is a custom Linux distribution for the **R36S** handheld gaming console a
|
||||
|
||||
### Display Panels
|
||||
|
||||
Arch R ships 20 pre-generated MIPI panel overlays covering all known R36S display variants. Panel selection is done by copying the correct `.dtbo` file to `overlays/mipi-panel.dtbo` on the boot partition.
|
||||
Arch R ships 43 pre-generated MIPI panel overlays covering all known R36S display variants, named after the exact motherboard revision (e.g. `R36S-V21_2024-12-18_2551.dtbo`, `G80CA-MB_V1.3-20251212_Panel_8.dtbo`). Panel selection is done by copying the correct `.dtbo` file to `overlays/mipi-panel.dtbo` on the boot partition. Sources live under `config/archr-dts/{original,clone,soysauce}/<MB-revision>/`; the build extracts the panel description from each revision's `rk3326-r36s-linux.dtb` via `config/mipi-generator/generator.sh`.
|
||||
|
||||
## Quick Start
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user