Skip to content

Commit

Permalink
publish: add "portable" workflow with CPU features not enabled
Browse files Browse the repository at this point in the history
when you get an "illegal instruction" error, most likely its because the qsv binary is compiled with CPU features not available on the current system.

CPU features that often increase performance, but are not universally available on all CPUs even for the same target platform (especially, on Virtual Machines)

The "portable" binaries do not have these CPU features enabled.

[skip ci]
  • Loading branch information
jqnatividad committed Aug 10, 2024
1 parent 164a17c commit b7d8d17
Showing 1 changed file with 220 additions and 0 deletions.
220 changes: 220 additions & 0 deletions .github/workflows/publish-portable.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
name: Publish-Portable

on:
push:
tags:
- '*'
workflow_dispatch:

env:
QSV_KIND: prebuilt

jobs:
analyze-tags:
runs-on: ubuntu-22.04
outputs:
previous-tag: ${{ steps.previoustag.outputs.tag }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
#▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼#
- name: Get previous tag
id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v1"
#▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲#
# - name: delete git repo
# run: rm -rf qsv

publish:
name: Publish for ${{ matrix.job.target }}
needs: analyze-tags
runs-on: ${{ matrix.job.os }}
strategy:
matrix:
rust: [stable]
job:
- os: ubuntu-22.04
os-name: linux
target: x86_64-unknown-linux-gnu
architecture: x86_64
use-cross: false
addl-build-args: --features=apply,luau,fetch,foreach,self_update,geocode,polars,to
default-features:
addl-qsvlite-features:
addl-qsvdp-features: luau,polars
addl-rustflags:
- os: ubuntu-22.04
os-name: linux
target: x86_64-unknown-linux-musl
architecture: x86_64
musl-prep: true
use-cross: false
addl-build-args: --features=apply,fetch,foreach,self_update
default-features:
addl-qsvlite-features:
addl-qsvdp-features:
addl-rustflags:
- os: ubuntu-22.04
os-name: linux
target: i686-unknown-linux-gnu
architecture: i686
use-cross: true
addl-build-args: --features=apply,fetch,foreach,self_update
default-features:
addl-qsvlite-features:
addl-qsvdp-features:
addl-rustflags:
- os: windows-latest
os-name: windows
target: x86_64-pc-windows-msvc
architecture: x86_64
use-cross: false
addl-build-args: --features=apply,luau,fetch,self_update,geocode,polars,to
default-features:
addl-qsvlite-features:
addl-qsvdp-features: luau
addl-rustflags:
- os: windows-latest
os-name: windows
target: i686-pc-windows-msvc
architecture: i686
use-cross: true
addl-build-args: --features=apply,fetch,self_update
default-features:
addl-qsvlite-features:
addl-qsvdp-features:
addl-rustflags:
- os: windows-latest
os-name: windows
target: x86_64-pc-windows-gnu
architecture: x86_64
use-cross: false
addl-build-args: --features=apply,luau,fetch,self_update,geocode,polars,to
default-features: --no-default-features
addl-qsvlite-features:
addl-qsvdp-features: luau
addl-rustflags:
# - os: macos-12
# os-name: macos
# target: x86_64-apple-darwin
# architecture: x86_64
# use-cross: false
# addl-build-args: --features=apply,luau,fetch,foreach,self_update,polars
# default-features: --no-default-features
# addl-qsvlite-features:
# addl-qsvdp-features: luau
# - os: macos-12
# os-name: macos
# target: aarch64-apple-darwin
# architecture: aarch64
# use-cross: true
# addl-build-args: --features=apply,fetch,foreach,self_update
# default-features: --no-default-features
# addl-qsvlite-features:
# addl-qsvdp-features:
- os: ubuntu-22.04
os-name: linux
target: aarch64-unknown-linux-gnu
architecture: aarch64
use-cross: true
addl-build-args: --features=apply,fetch,foreach,self_update
default-features:
addl-qsvlite-features:
addl-qsvdp-features:
addl-rustflags:
# - os: ubuntu-20.04
# os-name: linux
# target: arm-unknown-linux-gnueabihf
# architecture: arm
# use-cross: true
# addl-build-args: --features=apply,luau,fetch,foreach,self_update
# default-features: --no-default-features
# - os: ubuntu-20.04
# os-name: linux
# target: arm-unknown-linux-musleabihf
# architecture: arm
# use-cross: true
# addl-build-args: --features=apply,luau,fetch,foreach,self_update
# default-features: --no-default-features

steps:
- name: Installing Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust }}
profile: minimal
target: ${{ matrix.job.target }}
override: true
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ needs.analyze-tags.outputs.previous-tag }}
- name: build prep for x86_64-unknown-linux-musl
if: ${{ matrix.job.musl-prep }}
run: |
sudo apt-get install musl-tools musl-dev
sudo ln -s /usr/bin/g++ /usr/bin/musl-g++
- name: Build qsv
# env:
# RUSTFLAGS: --emit=asm
env:
RUSTFLAGS: ${{ matrix.job.addl-rustflags }}
uses: actions-rs/cargo@v1
with:
command: build
use-cross: ${{ matrix.job.use-cross }}
toolchain: ${{ matrix.rust }}
args: --release --locked --bin qsv --target ${{ matrix.job.target }} ${{ matrix.job.addl-build-args }},feature_capable ${{ matrix.job.default-features }}
- name: Build qsvlite
env:
RUSTFLAGS: --emit=asm ${{ matrix.job.addl-rustflags }}
uses: actions-rs/cargo@v1
with:
command: build
use-cross: ${{ matrix.job.use-cross }}
toolchain: ${{ matrix.rust }}
args: --release --locked --bin qsvlite --features=lite,self_update,${{ matrix.job.addl-qsvlite-features }} --target ${{ matrix.job.target }} ${{ matrix.job.default-features }}
- name: Build qsvdp
env:
RUSTFLAGS: --emit=asm ${{ matrix.job.addl-rustflags }}
uses: actions-rs/cargo@v1
with:
command: build
use-cross: ${{ matrix.job.use-cross }}
toolchain: ${{ matrix.rust }}
args: --release --locked --bin qsvdp --features=datapusher_plus,${{ matrix.job.addl-qsvdp-features }} --target ${{ matrix.job.target }} ${{ matrix.job.default-features }}
- name: Copy binaries to working dir
shell: bash
run: |
mkdir qsv-${{ needs.analyze-tags.outputs.previous-tag }}
rm target/${{ matrix.job.target }}/release/*.d
cp -v target/${{ matrix.job.target }}/release/qsv* qsv-${{ needs.analyze-tags.outputs.previous-tag }}
- name: Create README
shell: bash
run: |
cat docs/publishing_assets/README.txt docs/publishing_assets/qsv-${{ matrix.job.target }}.txt > qsv-${{ needs.analyze-tags.outputs.previous-tag }}/README
- name: zip up binaries
run: 7z a -tzip qsv-${{ needs.analyze-tags.outputs.previous-tag }}-${{ matrix.job.target }}-portable.zip ./qsv-${{ needs.analyze-tags.outputs.previous-tag }}/* -mx=9 -mmt=on
- name: install zipsign
run: |
cargo install zipsign
- name: Fetch zipsign private key
uses: mobiledevops/secret-to-file-action@v1
with:
base64-encoded-secret: ${{ secrets.QSV_ZIPSIGN_PRIV_KEY }}
filename: "qsvpriv.key"
is-executable: false
working-directory: "."
- name: zipsign binary
run: |
zipsign sign zip qsv-${{ needs.analyze-tags.outputs.previous-tag }}-${{ matrix.job.target }}-portable.zip qsvpriv.key
- name: Upload zipped binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: qsv-${{ needs.analyze-tags.outputs.previous-tag }}-${{ matrix.job.target }}-portable.zip
asset_name: qsv-${{ needs.analyze-tags.outputs.previous-tag }}-${{ matrix.job.target }}-portable.zip
overwrite: true
tag: ${{ needs.analyze-tags.outputs.previous-tag }}

0 comments on commit b7d8d17

Please sign in to comment.