Files
PixelplanetandCopilot 858293663b feat(install): one-command installer with automatic Steam library entry
Users can now install with a single command, either piped or from the
release tarball:

  curl -fsSL .../tools/install.sh | sh
  ./install.sh

Tools/install.sh downloads the latest (or a pinned) ARM64 release, verifies
the published checksum, installs to ~/PixelVRPlayer, and registers
"Pixel VR Player" as a Non-Steam Game by editing shortcuts.vdf through an
embedded binary-KeyValues helper (existing shortcuts are preserved, the file
is backed up, and unsupported files are left untouched). Options cover
--dir, --version, --no-steam, --restart-steam and --uninstall. Upgrades never
touch ~/.config/pixelvr or ~/.cache/pixelvr.

Also:
- package-release.sh ships install.sh and a VERSION file in the tarball.
- The release workflow publishes .sha256 checksums and syntax-checks the
  installer before building.
- Docs describe the one-command path for end users.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-17 10:16:06 +02:00

89 lines
3.1 KiB
YAML

name: Release
on:
push:
tags: ["v*"]
workflow_dispatch:
inputs:
tag:
description: "Existing v* tag to publish (leave empty for a build-only run)"
required: false
default: ""
permissions:
contents: write
jobs:
build:
name: Build Steam Frame ARM64 release
# Native aarch64 runner: no cross-toolchain or device sysroot needed.
# Debian 13 (trixie) ships FFmpeg 7, matching the SONAMEs present on the
# Steam Frame (libavcodec.so.61, libavutil.so.59, ...).
runs-on: ubuntu-24.04-arm
container: debian:trixie
steps:
- name: Install build dependencies
run: |
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
build-essential cmake ninja-build git ca-certificates pkg-config file \
glslang-tools libvulkan-dev \
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev \
libpulse-dev libfreetype-dev libsmbclient-dev \
libx11-dev libxrandr-dev libxxf86vm-dev libgl-dev
- uses: actions/checkout@v4
with:
ref: ${{ inputs.tag || github.ref }}
fetch-depth: 1
- name: Check scripts
run: |
set -eux
sh -n tools/install.sh
bash -n tools/package-release.sh
bash -n tools/build.sh
- name: Build
run: bash tools/build.sh
- name: Package
run: |
set -eux
tag="${{ inputs.tag || github.ref_name }}"
bash tools/package-release.sh build pixelvr-linux-arm64.tar.gz "${tag}"
cp pixelvr-linux-arm64.tar.gz "pixelvr-linux-arm64-${tag}.tar.gz"
sha256sum pixelvr-linux-arm64.tar.gz > pixelvr-linux-arm64.tar.gz.sha256
sha256sum "pixelvr-linux-arm64-${tag}.tar.gz" > "pixelvr-linux-arm64-${tag}.tar.gz.sha256"
- name: Verify artifact
run: |
file build/bin/pixelvr
file build/bin/pixelvr | grep -q 'ARM aarch64'
tar -tzf pixelvr-linux-arm64.tar.gz | grep -q '^PixelVRPlayer/run.sh$'
tar -tzf pixelvr-linux-arm64.tar.gz | grep -q '^PixelVRPlayer/install.sh$'
tar -tzf pixelvr-linux-arm64.tar.gz | grep -q '^PixelVRPlayer/VERSION$'
tar -tzf pixelvr-linux-arm64.tar.gz | grep -q '/shaders/thumb.frag.spv$'
sha256sum -c pixelvr-linux-arm64.tar.gz.sha256
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: pixelvr-linux-arm64
path: |
pixelvr-linux-arm64.tar.gz
pixelvr-linux-arm64.tar.gz.sha256
pixelvr-linux-arm64-v*.tar.gz
- name: Publish GitHub release
if: startsWith(github.ref, 'refs/tags/v') || inputs.tag != ''
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ inputs.tag || github.ref_name }}
generate_release_notes: true
files: |
pixelvr-linux-arm64.tar.gz
pixelvr-linux-arm64.tar.gz.sha256
pixelvr-linux-arm64-v*.tar.gz
pixelvr-linux-arm64-v*.tar.gz.sha256