Add cross-version parameter to specify cross version

This commit is contained in:
Dave Rolsky 2023-10-22 11:12:50 -05:00
parent ef5051e603
commit 883c7a0854
No known key found for this signature in database
8 changed files with 80 additions and 32 deletions

View File

@ -35,6 +35,16 @@ jobs:
expect_stripped: "--no-expect-stripped"
can_test: true
- platform_name: Linux-aarch64-with-cross-v0.2.3
os: ubuntu-20.04
target: aarch64-unknown-linux-musl
cross-version: "v0.2.3"
expect_file_re: "aarch64"
expect_cross: "--expect-cross"
expect_cross_version: "0.2.3"
expect_stripped: "--no-expect-stripped"
can_test: true
- platform_name: Linux-arm
os: ubuntu-20.04
target: arm-unknown-linux-musleabi
@ -183,6 +193,7 @@ jobs:
uses: ./
with:
command: both
cross-version: ${{ matrix.platform.cross-version }}
target: ${{ matrix.platform.target }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: ${{ matrix.platform.can_test }}
@ -190,6 +201,7 @@ jobs:
uses: ./
with:
command: test
cross-version: ${{ matrix.platform.cross-version }}
target: ${{ matrix.platform.target }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: ${{ matrix.platform.can_test }}
@ -197,6 +209,7 @@ jobs:
uses: ./
with:
command: build
cross-version: ${{ matrix.platform.cross-version }}
target: ${{ matrix.platform.target }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strip: true
@ -204,6 +217,7 @@ jobs:
uses: ./
with:
command: build
cross-version: ${{ matrix.platform.cross-version }}
working-directory: subcrate
target: ${{ matrix.platform.target }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@ -214,5 +228,6 @@ jobs:
tests/check-binary.pl \
--target "${{ matrix.platform.target }}" \
--expect-file-re "${{ matrix.platform.expect_file_re }}" \
--expect-cross-version "${{ matrix.platform.expect_cross_version }}" \
${{ matrix.platform.expect_cross }} \
${{ matrix.platform.expect_stripped }}

View File

@ -1,3 +1,8 @@
## 0.0.10
- Added a new `cross-version` parameter. This can be specified to make this action use a specific
version of `cross`. If this is not specified, the latest version will be used.
## 0.0.9 - 2023-09-10
- Added a `working-directory` parameter. By default this is the current directory (`.`) but you can

View File

@ -56,7 +56,7 @@ jobs:
This action takes the following parameters:
| Key | Type | Required? | Description |
| ------------------- | ---------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| ------------------- | ---------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `command` | string (one of `build`, `test`, or `both`) | no | The command(s) to run. The default is `build`. Running the `test` command will fail with \*BSD targets, non-x86 Windows, and macOS ARM. |
| `target` | string | yes | The target triple to compile for. This should be one of the targets listed by running `rustup target list`. |
| `working-directory` | string | no | The working directory in which to run the `cargo` or `cross` commands. Defaults to the current directory (`.`). |
@ -64,6 +64,7 @@ This action takes the following parameters:
| `GITHUB_TOKEN` | string | no | Defaults to the value of `${{ github.token }}`. |
| `args` | string | no | A string-separated list of arguments to be passed to `cross build`, like `--release --locked`. |
| `strip` | boolean (`true` or `false`) | no | If this is true, then the resulting binary will be stripped if possible. This is only possible for binaries which weren't cross-compiled. |
| `cross-version` | string | no | This can be used to set the version of `cross` to use. If specified, it should be a specific `cross` release tag. If this is not set then the latest version will always be used. |
## How it Works

View File

@ -32,6 +32,10 @@ inputs:
strip:
description: Strip the compiled binary
default: false
cross-version:
description: |
The version of cross to use. If not specified, then the latest version
will be used.
runs:
using: composite
steps:
@ -47,10 +51,10 @@ runs:
with:
targets: ${{ inputs.target }}
toolchain: ${{ inputs.toolchain }}
- name: Determine latest cross version
id: determine-latest-cross-version
- name: Determine cross version
id: determine-cross-version
shell: bash
run: determine-latest-cross-version.sh
run: determine-cross-version.sh "${{ inputs.cross-version }}"
env:
GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }}
if: ${{ steps.determine-cross-compile.outputs.needs-cross == 'true' }}
@ -66,11 +70,11 @@ runs:
uses: actions/cache@v3
with:
path: ${{ steps.set-cross-dir.outputs.cross-dir }}/cross
key: ${{ runner.os }}-${{ steps.determine-latest-cross-version.outputs.cross-version }}
key: ${{ runner.os }}-${{ steps.determine-cross-version.outputs.cross-version }}
if: ${{ steps.determine-cross-compile.outputs.needs-cross == 'true' }}
- name: Install cross if cross-compiling (*nix)
shell: bash
run: install-cross-nix.sh ${{ steps.set-cross-dir.outputs.cross-dir }}
run: install-cross-nix.sh ${{ steps.set-cross-dir.outputs.cross-dir }} ${{ steps.determine-cross-version.outputs.cross-version }}
if: ${{ steps.determine-cross-compile.outputs.needs-cross == 'true' && steps.cache-cross.outputs.cache-hit != 'true' }}
env:
GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }}

15
determine-cross-version.sh Executable file
View File

@ -0,0 +1,15 @@
set -e
set -x
set -o pipefail
VERSION=$1
if [ -z "$VERSION" ]; then
JSON=$( curl \
--request GET \
--header "Authorization: Bearer $GITHUB_TOKEN" \
https://api.github.com/repos/cross-rs/cross/releases/latest )
VERSION=$( echo "$JSON" | jq -r ".tag_name")
fi
echo "cross-version=$VERSION" >> $GITHUB_OUTPUT

View File

@ -1,11 +0,0 @@
set -e
set -x
set -o pipefail
JSON=$( curl \
--request GET \
--header "Authorization: Bearer $GITHUB_TOKEN" \
https://api.github.com/repos/cross-rs/cross/releases/latest )
VERSION=$( echo "$JSON" | jq -r ".tag_name")
echo "cross-version=$VERSION" >> $GITHUB_OUTPUT

View File

@ -3,9 +3,16 @@ set -x
set -o pipefail
CROSS_DIR="$1"
VERSION="$2"
VERSION_ARGS=""
if [ -n "$VERSION" ]; then
VERSION_ARGS="--tag $VERSION"
fi
cd "$CROSS_DIR"
export TARGET=.
curl --silent --location \
https://raw.githubusercontent.com/houseabsolute/ubi/master/bootstrap/bootstrap-ubi.sh |
sh
./ubi --project cross-rs/cross --matching musl --in .
./ubi --project cross-rs/cross --matching musl --in . $VERSION_ARGS

View File

@ -19,6 +19,7 @@ use Test::More;
sub main {
my $target;
my $expect_cross;
my $expect_cross_version;
my $expect_file_re;
my $expect_stripped;
@ -26,10 +27,14 @@ sub main {
'target=s' => \$target,
'expect-file-re=s' => \$expect_file_re,
'expect-cross!' => \$expect_cross,
'expect-cross-version=s' => \$expect_cross_version,
'expect-stripped!' => \$expect_stripped,
);
check_cross( path( $ENV{RUNNER_TEMP} ), $expect_cross );
check_cross(
path( $ENV{RUNNER_TEMP} ), $expect_cross,
$expect_cross_version
);
for my $bin (
path( qw( . target ), $target, qw( debug test-project ) ),
@ -41,10 +46,17 @@ sub main {
done_testing();
}
sub check_cross ( $bin_dir, $expect_cross ) {
sub check_cross ( $bin_dir, $expect_cross, $expect_cross_version ) {
my $cross = $bin_dir->child('cross');
if ($expect_cross) {
ok( $cross->is_file && -x $cross, 'found `cross` in $PATH' );
if ($expect_cross_version) {
my $version = capturex( $cross, '--version' );
like(
$version, qr/\Q$expect_cross_version/,
'cross version matches expected version'
);
}
}
else {
ok( !$cross->exists, 'did not find `cross` in $PATH' );