mirror of
https://github.com/chenxiaolong/avbroot.git
synced 2026-07-03 14:05:11 +02:00
3a3582ce4c
This commit replaces the previous approach of patching real OTAs with patching mock OTAs. The motivation for this change is to make it possible to test the system partition otacerts.zip patching without needing to download huge files. Adding the system image to the stripped OTAs would increase the file size by an order of magnitude. The mock OTAs are generated from a set of profiles defined in e2e.toml. The four included profiles are meant to mimic the OTAs used for testing before: * pixel_v4_gki ~= cheetah * pixel_v4_non_gki ~= bluejay * pixel_v3 ~= bramble * pixel_v2 ~= sunfish There is no equivalent profile for ossi because newer OnePlus devices no longer support custom signing keys properly. The mock OTAs are perfectly valid, structure and signature-wise. They just don't include any real partition data where possible. They are initially signed with a different set of keys to ensure that the changes made by the patching process are actually visible. With how small the mock OTAs are, testing every profile only takes about two seconds. Thus, the Github Actions workflow was adjusted to just run e2e in the same job as the build. Signed-off-by: Andrew Gunnerson <accounts+github@chiller3.com>
106 lines
3.1 KiB
YAML
106 lines
3.1 KiB
YAML
name: CI
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
|
|
# This allows a subsequently queued workflow run to interrupt previous runs, but
|
|
# only in pull requests.
|
|
concurrency:
|
|
group: '${{ github.workflow }} @ ${{ github.head_ref || github.sha }}'
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
RUSTFLAGS: -C strip=symbols -C target-feature=+crt-static
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
- macos-latest
|
|
steps:
|
|
- name: Check out repository
|
|
uses: actions/checkout@v3
|
|
with:
|
|
# For git describe
|
|
fetch-depth: 0
|
|
|
|
- name: Get version
|
|
id: get_version
|
|
shell: bash
|
|
run: |
|
|
echo -n 'version=' >> "${GITHUB_OUTPUT}"
|
|
git describe --always \
|
|
| sed -E "s/^v//g;s/([^-]*-g)/r\1/;s/-/./g" \
|
|
>> "${GITHUB_OUTPUT}"
|
|
|
|
- name: Get Rust target triple
|
|
id: get_target
|
|
shell: bash
|
|
env:
|
|
RUSTC_BOOTSTRAP: '1'
|
|
run: |
|
|
echo -n 'name=' >> "${GITHUB_OUTPUT}"
|
|
rustc -vV | sed -n 's|host: ||p' >> "${GITHUB_OUTPUT}"
|
|
|
|
- name: Cache Rust dependencies
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Clippy
|
|
shell: bash
|
|
run: |
|
|
cargo clippy --release --workspace --features static \
|
|
--target ${{ steps.get_target.outputs.name }}
|
|
|
|
- name: Build
|
|
shell: bash
|
|
run: |
|
|
cargo build --release --workspace --features static \
|
|
--target ${{ steps.get_target.outputs.name }}
|
|
|
|
- name: Tests
|
|
shell: bash
|
|
run: |
|
|
cargo test --release --workspace --features static \
|
|
--target ${{ steps.get_target.outputs.name }}
|
|
|
|
- name: End to end tests
|
|
shell: bash
|
|
run: |
|
|
cargo run --release -p e2e --features static \
|
|
--target ${{ steps.get_target.outputs.name }} \
|
|
-- test -a -c e2e/e2e.toml
|
|
|
|
- name: Archive documentation
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: avbroot-${{ steps.get_version.outputs.version }}-${{ steps.get_target.outputs.name }}
|
|
path: |
|
|
LICENSE
|
|
README.md
|
|
|
|
# Due to https://github.com/rust-lang/rust/issues/78210, we have to use
|
|
# the --target option, which puts all output files in a different path.
|
|
# Symlink that path to the normal output directory so that we don't need
|
|
# to specify the Rust triple everywhere.
|
|
- name: Symlink target directory
|
|
shell: bash
|
|
run: |
|
|
rm -rf target/output
|
|
ln -s ${{ steps.get_target.outputs.name }}/release target/output
|
|
|
|
# This is separate so we can have a flat directory structure.
|
|
- name: Archive executable
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: avbroot-${{ steps.get_version.outputs.version }}-${{ steps.get_target.outputs.name }}
|
|
path: |
|
|
target/output/avbroot
|
|
target/output/avbroot.exe
|