mirror of
https://github.com/ps5-linux/ps5-linux-image.git
synced 2026-07-15 21:42:27 +00:00
move actions to image repo
This commit is contained in:
194
.github/workflows/build-image.yml
vendored
Normal file
194
.github/workflows/build-image.yml
vendored
Normal file
@@ -0,0 +1,194 @@
|
||||
name: Build Image
|
||||
run-name: Build Image (${{ inputs.distro || 'all' }})
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
distro:
|
||||
description: 'Distribution'
|
||||
default: 'ubuntu2604'
|
||||
type: choice
|
||||
options: [all, ubuntu2604, arch, cachyos, alpine]
|
||||
workflow_call:
|
||||
inputs:
|
||||
distro:
|
||||
type: string
|
||||
default: 'ubuntu2604'
|
||||
secrets:
|
||||
REMOTE_SSH_KEY:
|
||||
required: true
|
||||
REMOTE_SSH_CONFIG:
|
||||
required: true
|
||||
REMOTE_SSH_KNOWN_HOSTS:
|
||||
required: true
|
||||
R2_ACCESS_KEY_ID:
|
||||
required: true
|
||||
R2_SECRET_ACCESS_KEY:
|
||||
required: true
|
||||
R2_ENDPOINT:
|
||||
required: true
|
||||
R2_BUCKET:
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
matrix:
|
||||
runs-on: self-hosted
|
||||
outputs:
|
||||
distros: ${{ steps.set.outputs.distros }}
|
||||
steps:
|
||||
- id: set
|
||||
run: |
|
||||
INPUT="${{ inputs.distro || 'ubuntu2604' }}"
|
||||
if [ "$INPUT" = "all" ]; then
|
||||
echo 'distros=["ubuntu2604","arch","cachyos","alpine"]' >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "distros=[\"$INPUT\"]" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
build:
|
||||
needs: matrix
|
||||
runs-on: self-hosted
|
||||
timeout-minutes: 240
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 1
|
||||
matrix:
|
||||
distro: ${{ fromJson(needs.matrix.outputs.distros) }}
|
||||
|
||||
env:
|
||||
CCACHE_DIR: /home/opc/ccache
|
||||
|
||||
steps:
|
||||
- name: Checkout image builder
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ps5-linux/ps5-linux-image
|
||||
path: image
|
||||
ref: main
|
||||
|
||||
- name: Build ${{ matrix.distro }} image
|
||||
run: |
|
||||
bash image/build_image.sh --distro "${{ matrix.distro }}"
|
||||
|
||||
- name: Set version info
|
||||
id: version
|
||||
run: |
|
||||
psha=$(git -C image/work/ps5-linux-patches rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
kver=$(cat image/linux-bin/VERSION 2>/dev/null || echo "unknown")
|
||||
ts=$(date -u +%Y%m%d-%H%M%S)
|
||||
echo "psha=$psha" >> "$GITHUB_OUTPUT"
|
||||
echo "kver=$kver" >> "$GITHUB_OUTPUT"
|
||||
echo "ts=$ts" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Report
|
||||
run: |
|
||||
ls -lh image/output/*.img
|
||||
sha256sum image/output/*.img
|
||||
|
||||
- name: Compress image
|
||||
run: |
|
||||
xz -T0 -9 -c image/output/ps5-${{ matrix.distro }}.img \
|
||||
> image/output/ps5-${{ matrix.distro }}.img.xz
|
||||
|
||||
- name: Upload to R2
|
||||
env:
|
||||
RCLONE_CONFIG_R2_TYPE: s3
|
||||
RCLONE_CONFIG_R2_PROVIDER: Cloudflare
|
||||
RCLONE_CONFIG_R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
|
||||
RCLONE_CONFIG_R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
|
||||
RCLONE_CONFIG_R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }}
|
||||
RCLONE_CONFIG_R2_NO_CHECK_BUCKET: true
|
||||
run: |
|
||||
rclone copyto image/output/ps5-${{ matrix.distro }}.img.xz \
|
||||
"r2:${{ secrets.R2_BUCKET }}/ps5-${{ matrix.distro }}.img.xz"
|
||||
|
||||
- name: Save build metadata
|
||||
run: |
|
||||
mkdir -p meta
|
||||
sha256sum image/output/ps5-${{ matrix.distro }}.img.xz \
|
||||
| sed 's|image/output/||' > meta/${{ matrix.distro }}.sha256
|
||||
echo "${{ steps.version.outputs.kver }}" > meta/kver
|
||||
echo "${{ steps.version.outputs.psha }}" > meta/psha
|
||||
echo "${{ steps.version.outputs.ts }}" > meta/ts
|
||||
|
||||
- name: Upload build metadata
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: meta-${{ matrix.distro }}
|
||||
path: meta/
|
||||
retention-days: 1
|
||||
|
||||
- name: Upload to remote
|
||||
env:
|
||||
SSH_KEY: ${{ secrets.REMOTE_SSH_KEY }}
|
||||
SSH_CONFIG: ${{ secrets.REMOTE_SSH_CONFIG }}
|
||||
SSH_KNOWN_HOSTS: ${{ secrets.REMOTE_SSH_KNOWN_HOSTS }}
|
||||
run: |
|
||||
DIR=$(mktemp -d)
|
||||
echo "$SSH_KEY" > "$DIR/key"
|
||||
chmod 600 "$DIR/key"
|
||||
echo "$SSH_CONFIG" > "$DIR/config"
|
||||
sed -i "s|~/.ssh/remote_key|$DIR/key|" "$DIR/config"
|
||||
echo "$SSH_KNOWN_HOSTS" > "$DIR/known_hosts"
|
||||
SSH="ssh -F $DIR/config -o UserKnownHostsFile=$DIR/known_hosts"
|
||||
SCP="scp -F $DIR/config -o UserKnownHostsFile=$DIR/known_hosts"
|
||||
DEST="image-${{ matrix.distro }}-${{ steps.version.outputs.ts }}"
|
||||
$SSH remote mkdir -p "./$DEST"
|
||||
$SCP image/output/*.img.xz "remote:./$DEST/"
|
||||
$SSH remote 'ls -dt image-${{ matrix.distro }}-*/ | tail -n +5 | xargs rm -rf' || true
|
||||
rm -rf "$DIR"
|
||||
|
||||
release:
|
||||
needs: build
|
||||
runs-on: self-hosted
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Download build metadata
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
pattern: meta-*
|
||||
path: meta
|
||||
merge-multiple: true
|
||||
|
||||
- name: Prepare release body
|
||||
id: body
|
||||
run: |
|
||||
KVER=$(cat meta/kver)
|
||||
PSHA=$(cat meta/psha)
|
||||
TS=$(cat meta/ts)
|
||||
SUMS=$(cat meta/*.sha256)
|
||||
|
||||
{
|
||||
echo 'text<<EOF'
|
||||
echo "PS5 Linux images — built from latest \`main\`."
|
||||
echo ""
|
||||
echo "Kernel: \`$KVER\`"
|
||||
echo "Patches: [\`$PSHA\`](https://github.com/ps5-linux/ps5-linux-patches/commit/$PSHA)"
|
||||
echo "Built: \`$TS\`"
|
||||
echo ""
|
||||
echo "| Image | Download |"
|
||||
echo "|-------|----------|"
|
||||
echo "| Ubuntu 26.04 | [\`ps5-ubuntu2604.img.xz\`](https://pub-561df4012f1a46fbbdf618d5cc5941f6.r2.dev/ps5-ubuntu2604.img.xz) |"
|
||||
echo "| Arch | [\`ps5-arch.img.xz\`](https://pub-561df4012f1a46fbbdf618d5cc5941f6.r2.dev/ps5-arch.img.xz) |"
|
||||
echo "| CachyOS | [\`ps5-cachyos.img.xz\`](https://pub-561df4012f1a46fbbdf618d5cc5941f6.r2.dev/ps5-cachyos.img.xz) |"
|
||||
echo "| Alpine | [\`ps5-alpine.img.xz\`](https://pub-561df4012f1a46fbbdf618d5cc5941f6.r2.dev/ps5-alpine.img.xz) |"
|
||||
echo ""
|
||||
echo "**SHA256 checksums:**"
|
||||
echo "\`\`\`"
|
||||
echo "$SUMS"
|
||||
echo "\`\`\`"
|
||||
echo 'EOF'
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Create or update release
|
||||
uses: softprops/action-gh-release@v3
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
tag_name: latest
|
||||
name: PS5 Linux Image (latest)
|
||||
body: ${{ steps.body.outputs.text }}
|
||||
make_latest: true
|
||||
173
.github/workflows/test-uploads.yml
vendored
Normal file
173
.github/workflows/test-uploads.yml
vendored
Normal file
@@ -0,0 +1,173 @@
|
||||
name: test uploads
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
matrix:
|
||||
runs-on: self-hosted
|
||||
outputs:
|
||||
distros: ${{ steps.set.outputs.distros }}
|
||||
steps:
|
||||
- id: set
|
||||
run: echo 'distros=["ubuntu2604","arch","cachyos","alpine"]' >> "$GITHUB_OUTPUT"
|
||||
|
||||
build:
|
||||
needs: matrix
|
||||
runs-on: self-hosted
|
||||
timeout-minutes: 10
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 1
|
||||
matrix:
|
||||
distro: ${{ fromJson(needs.matrix.outputs.distros) }}
|
||||
|
||||
steps:
|
||||
- name: Reset workspace
|
||||
run: sudo rm -rf ./*
|
||||
|
||||
- name: Create fake image
|
||||
run: |
|
||||
mkdir -p image/output
|
||||
dd if=/dev/urandom of=image/output/ps5-${{ matrix.distro }}.img bs=1M count=8
|
||||
|
||||
- name: Compress image
|
||||
run: |
|
||||
xz -T0 -1 -c image/output/ps5-${{ matrix.distro }}.img \
|
||||
> image/output/ps5-${{ matrix.distro }}.img.xz
|
||||
|
||||
- name: Upload to R2
|
||||
env:
|
||||
RCLONE_CONFIG_R2_TYPE: s3
|
||||
RCLONE_CONFIG_R2_PROVIDER: Cloudflare
|
||||
RCLONE_CONFIG_R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
|
||||
RCLONE_CONFIG_R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
|
||||
RCLONE_CONFIG_R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }}
|
||||
RCLONE_CONFIG_R2_NO_CHECK_BUCKET: true
|
||||
run: |
|
||||
rclone copyto image/output/ps5-${{ matrix.distro }}.img.xz \
|
||||
"r2:${{ secrets.R2_BUCKET }}/test-${{ matrix.distro }}.img.xz" -v
|
||||
|
||||
- name: Save build metadata
|
||||
run: |
|
||||
mkdir -p meta
|
||||
sha256sum image/output/ps5-${{ matrix.distro }}.img.xz \
|
||||
| sed 's|image/output/||' > meta/${{ matrix.distro }}.sha256
|
||||
echo "6.x.y-test" > meta/kver
|
||||
echo "abc1234" > meta/psha
|
||||
date -u +%Y%m%d-%H%M%S > meta/ts
|
||||
|
||||
- name: Upload build metadata
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: meta-${{ matrix.distro }}
|
||||
path: meta/
|
||||
retention-days: 1
|
||||
|
||||
- name: Upload to remote
|
||||
env:
|
||||
SSH_KEY: ${{ secrets.REMOTE_SSH_KEY }}
|
||||
SSH_CONFIG: ${{ secrets.REMOTE_SSH_CONFIG }}
|
||||
SSH_KNOWN_HOSTS: ${{ secrets.REMOTE_SSH_KNOWN_HOSTS }}
|
||||
run: |
|
||||
DIR=$(mktemp -d)
|
||||
echo "$SSH_KEY" > "$DIR/key"
|
||||
chmod 600 "$DIR/key"
|
||||
echo "$SSH_CONFIG" > "$DIR/config"
|
||||
sed -i "s|~/.ssh/remote_key|$DIR/key|" "$DIR/config"
|
||||
echo "$SSH_KNOWN_HOSTS" > "$DIR/known_hosts"
|
||||
SSH="ssh -F $DIR/config -o UserKnownHostsFile=$DIR/known_hosts"
|
||||
SCP="scp -F $DIR/config -o UserKnownHostsFile=$DIR/known_hosts"
|
||||
$SSH remote mkdir -p ./test-upload
|
||||
$SCP image/output/ps5-${{ matrix.distro }}.img.xz "remote:./test-upload/"
|
||||
rm -rf "$DIR"
|
||||
|
||||
- name: Cleanup
|
||||
if: always()
|
||||
run: rm -rf image/output meta
|
||||
|
||||
release:
|
||||
needs: build
|
||||
runs-on: self-hosted
|
||||
steps:
|
||||
- name: Download build metadata
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
pattern: meta-*
|
||||
path: meta
|
||||
merge-multiple: true
|
||||
|
||||
- name: Prepare release body
|
||||
id: body
|
||||
run: |
|
||||
KVER=$(cat meta/kver)
|
||||
PSHA=$(cat meta/psha)
|
||||
TS=$(cat meta/ts)
|
||||
SUMS=$(cat meta/*.sha256)
|
||||
|
||||
{
|
||||
echo 'text<<EOF'
|
||||
echo "PS5 Linux images — built from latest \`main\`."
|
||||
echo ""
|
||||
echo "Kernel: \`$KVER\`"
|
||||
echo "Patches: [\`$PSHA\`](https://github.com/ps5-linux/ps5-linux-patches/commit/$PSHA)"
|
||||
echo "Built: \`$TS\`"
|
||||
echo ""
|
||||
echo "| Image | Download |"
|
||||
echo "|-------|----------|"
|
||||
echo "| Ubuntu 26.04 | [\`ps5-ubuntu2604.img.xz\`](https://pub-561df4012f1a46fbbdf618d5cc5941f6.r2.dev/ps5-ubuntu2604.img.xz) |"
|
||||
echo "| Arch | [\`ps5-arch.img.xz\`](https://pub-561df4012f1a46fbbdf618d5cc5941f6.r2.dev/ps5-arch.img.xz) |"
|
||||
echo "| CachyOS | [\`ps5-cachyos.img.xz\`](https://pub-561df4012f1a46fbbdf618d5cc5941f6.r2.dev/ps5-cachyos.img.xz) |"
|
||||
echo "| Alpine | [\`ps5-alpine.img.xz\`](https://pub-561df4012f1a46fbbdf618d5cc5941f6.r2.dev/ps5-alpine.img.xz) |"
|
||||
echo ""
|
||||
echo "**SHA256 checksums:**"
|
||||
echo "\`\`\`"
|
||||
echo "$SUMS"
|
||||
echo "\`\`\`"
|
||||
echo 'EOF'
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Verify release body
|
||||
run: |
|
||||
echo "=== Release body ==="
|
||||
cat <<'EOF'
|
||||
${{ steps.body.outputs.text }}
|
||||
EOF
|
||||
echo ""
|
||||
echo "=== All checksums ==="
|
||||
cat meta/*.sha256
|
||||
|
||||
cleanup-remote:
|
||||
needs: release
|
||||
runs-on: self-hosted
|
||||
if: always()
|
||||
steps:
|
||||
- name: Clean up R2 test files
|
||||
env:
|
||||
RCLONE_CONFIG_R2_TYPE: s3
|
||||
RCLONE_CONFIG_R2_PROVIDER: Cloudflare
|
||||
RCLONE_CONFIG_R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
|
||||
RCLONE_CONFIG_R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
|
||||
RCLONE_CONFIG_R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }}
|
||||
RCLONE_CONFIG_R2_NO_CHECK_BUCKET: true
|
||||
run: |
|
||||
for d in ubuntu2604 arch cachyos alpine; do
|
||||
rclone delete "r2:${{ secrets.R2_BUCKET }}/test-${d}.img.xz" -v || true
|
||||
done
|
||||
|
||||
- name: Clean up remote test files
|
||||
env:
|
||||
SSH_KEY: ${{ secrets.REMOTE_SSH_KEY }}
|
||||
SSH_CONFIG: ${{ secrets.REMOTE_SSH_CONFIG }}
|
||||
SSH_KNOWN_HOSTS: ${{ secrets.REMOTE_SSH_KNOWN_HOSTS }}
|
||||
run: |
|
||||
DIR=$(mktemp -d)
|
||||
echo "$SSH_KEY" > "$DIR/key"
|
||||
chmod 600 "$DIR/key"
|
||||
echo "$SSH_CONFIG" > "$DIR/config"
|
||||
sed -i "s|~/.ssh/remote_key|$DIR/key|" "$DIR/config"
|
||||
echo "$SSH_KNOWN_HOSTS" > "$DIR/known_hosts"
|
||||
SSH="ssh -F $DIR/config -o UserKnownHostsFile=$DIR/known_hosts"
|
||||
$SSH remote rm -rf ./test-upload
|
||||
rm -rf "$DIR"
|
||||
14
.github/workflows/trigger-builds.yml
vendored
14
.github/workflows/trigger-builds.yml
vendored
@@ -6,24 +6,13 @@ on:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
kernel:
|
||||
permissions:
|
||||
contents: write
|
||||
uses: ps5-linux/ps5-linux-updates/.github/workflows/build-kernel.yml@main
|
||||
secrets:
|
||||
DISPATCH_TOKEN: ${{ secrets.DISPATCH_TOKEN }}
|
||||
REMOTE_SSH_KEY: ${{ secrets.REMOTE_SSH_KEY }}
|
||||
REMOTE_SSH_CONFIG: ${{ secrets.REMOTE_SSH_CONFIG }}
|
||||
REMOTE_SSH_KNOWN_HOSTS: ${{ secrets.REMOTE_SSH_KNOWN_HOSTS }}
|
||||
|
||||
image:
|
||||
permissions:
|
||||
contents: write
|
||||
uses: ps5-linux/ps5-linux-updates/.github/workflows/build-image.yml@main
|
||||
uses: ./.github/workflows/build-image.yml
|
||||
with:
|
||||
distro: all
|
||||
secrets:
|
||||
DISPATCH_TOKEN: ${{ secrets.DISPATCH_TOKEN }}
|
||||
REMOTE_SSH_KEY: ${{ secrets.REMOTE_SSH_KEY }}
|
||||
REMOTE_SSH_CONFIG: ${{ secrets.REMOTE_SSH_CONFIG }}
|
||||
REMOTE_SSH_KNOWN_HOSTS: ${{ secrets.REMOTE_SSH_KNOWN_HOSTS }}
|
||||
@@ -31,4 +20,3 @@ jobs:
|
||||
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
|
||||
R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }}
|
||||
R2_BUCKET: ${{ secrets.R2_BUCKET }}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user