Skip to content

Test Artifact Names #43

Test Artifact Names

Test Artifact Names #43

name: Test Artifact Names
on:
schedule:
- cron: "0 0 * * *" # Run daily at midnight
workflow_dispatch:
pull_request:
branches: [v1-master]
paths:
- "action.yml"
- "scripts/get-artifact-name.sh"
- "scripts/get-friendly-target-name.sh"
- ".github/workflows/test-artifact-names.yml"
jobs:
test-artifact-names:
strategy:
matrix:
include:
# Linux targets - friendly names
- use-friendly-target-names: "true"
target: x86_64-unknown-linux-gnu
expected-binary-name: "linux-x64"
expected-binary-symbols-name: "linux-x64.symbols"
expected-library-name: "c-library-linux-x64"
expected-library-symbols-name: "c-library-linux-x64.symbols"
- use-friendly-target-names: "true"
target: i686-unknown-linux-gnu
expected-binary-name: "linux-x86"
expected-binary-symbols-name: "linux-x86.symbols"
expected-library-name: "c-library-linux-x86"
expected-library-symbols-name: "c-library-linux-x86.symbols"
- use-friendly-target-names: "true"
target: aarch64-unknown-linux-gnu
expected-binary-name: "linux-arm64"
expected-binary-symbols-name: "linux-arm64.symbols"
expected-library-name: "c-library-linux-arm64"
expected-library-symbols-name: "c-library-linux-arm64.symbols"
- use-friendly-target-names: "true"
target: armv7-unknown-linux-gnueabihf
expected-binary-name: "linux-armv7-hf"
expected-binary-symbols-name: "linux-armv7-hf.symbols"
expected-library-name: "c-library-linux-armv7-hf"
expected-library-symbols-name: "c-library-linux-armv7-hf.symbols"
# Linux targets - raw triples
- use-friendly-target-names: "false"
target: x86_64-unknown-linux-gnu
expected-binary-name: "x86_64-unknown-linux-gnu"
expected-binary-symbols-name: "x86_64-unknown-linux-gnu.symbols"
expected-library-name: "c-library-x86_64-unknown-linux-gnu"
expected-library-symbols-name: "c-library-x86_64-unknown-linux-gnu.symbols"
- use-friendly-target-names: "false"
target: i686-unknown-linux-gnu
expected-binary-name: "i686-unknown-linux-gnu"
expected-binary-symbols-name: "i686-unknown-linux-gnu.symbols"
expected-library-name: "c-library-i686-unknown-linux-gnu"
expected-library-symbols-name: "c-library-i686-unknown-linux-gnu.symbols"
- use-friendly-target-names: "false"
target: aarch64-unknown-linux-gnu
expected-binary-name: "aarch64-unknown-linux-gnu"
expected-binary-symbols-name: "aarch64-unknown-linux-gnu.symbols"
expected-library-name: "c-library-aarch64-unknown-linux-gnu"
expected-library-symbols-name: "c-library-aarch64-unknown-linux-gnu.symbols"
- use-friendly-target-names: "false"
target: armv7-unknown-linux-gnueabihf
expected-binary-name: "armv7-unknown-linux-gnueabihf"
expected-binary-symbols-name: "armv7-unknown-linux-gnueabihf.symbols"
expected-library-name: "c-library-armv7-unknown-linux-gnueabihf"
expected-library-symbols-name: "c-library-armv7-unknown-linux-gnueabihf.symbols"
# Windows targets - friendly names
- use-friendly-target-names: "true"
target: x86_64-pc-windows-msvc
expected-binary-name: "windows-x64"
expected-binary-symbols-name: "windows-x64.symbols"
expected-library-name: "c-library-windows-x64"
expected-library-symbols-name: "c-library-windows-x64.symbols"
- use-friendly-target-names: "true"
target: i686-pc-windows-msvc
expected-binary-name: "windows-x86"
expected-binary-symbols-name: "windows-x86.symbols"
expected-library-name: "c-library-windows-x86"
expected-library-symbols-name: "c-library-windows-x86.symbols"
- use-friendly-target-names: "true"
target: aarch64-pc-windows-msvc
expected-binary-name: "windows-arm64"
expected-binary-symbols-name: "windows-arm64.symbols"
expected-library-name: "c-library-windows-arm64"
expected-library-symbols-name: "c-library-windows-arm64.symbols"
# Windows targets - raw triples
- use-friendly-target-names: "false"
target: x86_64-pc-windows-msvc
expected-binary-name: "x86_64-pc-windows-msvc"
expected-binary-symbols-name: "x86_64-pc-windows-msvc.symbols"
expected-library-name: "c-library-x86_64-pc-windows-msvc"
expected-library-symbols-name: "c-library-x86_64-pc-windows-msvc.symbols"
- use-friendly-target-names: "false"
target: i686-pc-windows-msvc
expected-binary-name: "i686-pc-windows-msvc"
expected-binary-symbols-name: "i686-pc-windows-msvc.symbols"
expected-library-name: "c-library-i686-pc-windows-msvc"
expected-library-symbols-name: "c-library-i686-pc-windows-msvc.symbols"
- use-friendly-target-names: "false"
target: aarch64-pc-windows-msvc
expected-binary-name: "aarch64-pc-windows-msvc"
expected-binary-symbols-name: "aarch64-pc-windows-msvc.symbols"
expected-library-name: "c-library-aarch64-pc-windows-msvc"
expected-library-symbols-name: "c-library-aarch64-pc-windows-msvc.symbols"
# macOS targets - friendly names
- use-friendly-target-names: "true"
target: x86_64-apple-darwin
expected-binary-name: "macos-x64"
expected-binary-symbols-name: "macos-x64.symbols"
expected-library-name: "c-library-macos-x64"
expected-library-symbols-name: "c-library-macos-x64.symbols"
- use-friendly-target-names: "true"
target: aarch64-apple-darwin
expected-binary-name: "macos-arm64"
expected-binary-symbols-name: "macos-arm64.symbols"
expected-library-name: "c-library-macos-arm64"
expected-library-symbols-name: "c-library-macos-arm64.symbols"
# macOS targets - raw triples
- use-friendly-target-names: "false"
target: x86_64-apple-darwin
expected-binary-name: "x86_64-apple-darwin"
expected-binary-symbols-name: "x86_64-apple-darwin.symbols"
expected-library-name: "c-library-x86_64-apple-darwin"
expected-library-symbols-name: "c-library-x86_64-apple-darwin.symbols"
- use-friendly-target-names: "false"
target: aarch64-apple-darwin
expected-binary-name: "aarch64-apple-darwin"
expected-binary-symbols-name: "aarch64-apple-darwin.symbols"
expected-library-name: "c-library-aarch64-apple-darwin"
expected-library-symbols-name: "c-library-aarch64-apple-darwin.symbols"
runs-on: ubuntu-latest
steps:
- name: Checkout Action
uses: actions/checkout@v6
- name: Test binary artifact name (no prefix)
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "" \
--target ${{ matrix.target }} \
--use-friendly-target-names ${{ matrix.use-friendly-target-names }} \
--artifact-type binary)
EXPECTED="${{ matrix.expected-binary-name }}"
echo "BINARY_ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME'"
exit 1
fi
echo "Binary artifact name correct: $ARTIFACT_NAME"
- name: Test binary-symbols artifact name (no prefix)
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "" \
--target ${{ matrix.target }} \
--use-friendly-target-names ${{ matrix.use-friendly-target-names }} \
--artifact-type binary-symbols)
EXPECTED="${{ matrix.expected-binary-symbols-name }}"
echo "BINARY_SYMBOLS_ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME'"
exit 1
fi
echo "Binary symbols artifact name correct: $ARTIFACT_NAME"
- name: Test library artifact name (with c-library prefix)
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "c-library" \
--target ${{ matrix.target }} \
--use-friendly-target-names ${{ matrix.use-friendly-target-names }} \
--artifact-type library)
EXPECTED="${{ matrix.expected-library-name }}"
echo "LIBRARY_ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME'"
exit 1
fi
echo "Library artifact name correct: $ARTIFACT_NAME"
- name: Test library-symbols artifact name (with c-library prefix)
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "c-library" \
--target ${{ matrix.target }} \
--use-friendly-target-names ${{ matrix.use-friendly-target-names }} \
--artifact-type library-symbols)
EXPECTED="${{ matrix.expected-library-symbols-name }}"
echo "LIBRARY_SYMBOLS_ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME'"
exit 1
fi
echo "Library symbols artifact name correct: $ARTIFACT_NAME"
# Test legacy crate-name behaviour for backwards compatibility
test-artifact-names-legacy:
runs-on: ubuntu-latest
steps:
- name: Checkout Action
uses: actions/checkout@v6
- name: Test legacy binary artifact name (crate-name only)
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--crate-name test-crate \
--target x86_64-unknown-linux-gnu \
--use-friendly-target-names true \
--artifact-type binary)
EXPECTED="test-crate-linux-x64"
echo "BINARY_ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME'"
exit 1
fi
echo "Legacy binary artifact name correct: $ARTIFACT_NAME"
- name: Test legacy binary-symbols artifact name (crate-name only)
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--crate-name test-crate \
--target x86_64-unknown-linux-gnu \
--use-friendly-target-names true \
--artifact-type binary-symbols)
EXPECTED="test-crate-linux-x64.symbols"
echo "BINARY_SYMBOLS_ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME'"
exit 1
fi
echo "Legacy binary symbols artifact name correct: $ARTIFACT_NAME"
- name: Test legacy library artifact name (crate-name only)
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--crate-name test-crate \
--target x86_64-unknown-linux-gnu \
--use-friendly-target-names true \
--artifact-type library)
EXPECTED="C-Library-test-crate-linux-x64"
echo "LIBRARY_ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME'"
exit 1
fi
echo "Legacy library artifact name correct: $ARTIFACT_NAME"
- name: Test legacy library-symbols artifact name (crate-name only)
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--crate-name test-crate \
--target x86_64-unknown-linux-gnu \
--use-friendly-target-names true \
--artifact-type library-symbols)
EXPECTED="C-Library-test-crate-linux-x64.symbols"
echo "LIBRARY_SYMBOLS_ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME'"
exit 1
fi
echo "Legacy library symbols artifact name correct: $ARTIFACT_NAME"
# Test artifact-prefix takes precedence over crate-name
test-artifact-prefix-precedence:
runs-on: ubuntu-latest
steps:
- name: Checkout Action
uses: actions/checkout@v6
- name: Test artifact-prefix overrides crate-name for binary
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "MyApp" \
--crate-name test-crate \
--target x86_64-unknown-linux-gnu \
--use-friendly-target-names true \
--artifact-type binary)
EXPECTED="MyApp-linux-x64"
echo "ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME' (artifact-prefix should take precedence)"
exit 1
fi
echo "artifact-prefix correctly takes precedence: $ARTIFACT_NAME"
- name: Test artifact-prefix overrides crate-name for library
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "MyLib" \
--crate-name test-crate \
--target x86_64-unknown-linux-gnu \
--use-friendly-target-names true \
--artifact-type library)
EXPECTED="MyLib-linux-x64"
echo "ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME' (artifact-prefix should take precedence)"
exit 1
fi
echo "artifact-prefix correctly takes precedence: $ARTIFACT_NAME"
# Test artifact-name-exclude-features functionality
test-artifact-name-exclude-features:
runs-on: ubuntu-latest
steps:
- name: Checkout Action
uses: actions/checkout@v6
- name: Test partial exclusion keeps non-excluded features
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "MyApp" \
--target x86_64-unknown-linux-gnu \
--features "c-exports,simd" \
--exclude-features "c-exports" \
--use-friendly-target-names true \
--artifact-type binary)
EXPECTED="MyApp-linux-x64-simd"
echo "ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME' (only c-exports should be excluded)"
exit 1
fi
echo "Partial exclusion works: $ARTIFACT_NAME"
- name: Test all features excluded produces no suffix
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "MyApp" \
--target x86_64-unknown-linux-gnu \
--features "foo,bar" \
--exclude-features "foo,bar" \
--use-friendly-target-names true \
--artifact-type binary)
EXPECTED="MyApp-linux-x64"
echo "ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME' (all features should be excluded)"
exit 1
fi
echo "All features excluded works: $ARTIFACT_NAME"
- name: Test whitespace trimmed from exclude list
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "MyApp" \
--target x86_64-unknown-linux-gnu \
--features "c-exports,simd" \
--exclude-features " c-exports , simd " \
--use-friendly-target-names true \
--artifact-type binary)
EXPECTED="MyApp-linux-x64"
echo "ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME' (whitespace should be trimmed)"
exit 1
fi
echo "Whitespace trimming works: $ARTIFACT_NAME"
- name: Test empty exclude list includes all features
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "MyApp" \
--target x86_64-unknown-linux-gnu \
--features "c-exports" \
--exclude-features "" \
--use-friendly-target-names true \
--artifact-type binary)
EXPECTED="MyApp-linux-x64-c-exports"
echo "ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME' (empty exclude list should include all features)"
exit 1
fi
echo "Empty exclude list works: $ARTIFACT_NAME"
- name: Test exact match only - c-exports does not exclude c-exports-extended
shell: bash
run: |
ARTIFACT_NAME=$(./scripts/get-artifact-name.sh \
--artifact-prefix "MyApp" \
--target x86_64-unknown-linux-gnu \
--features "c-exports-extended" \
--exclude-features "c-exports" \
--use-friendly-target-names true \
--artifact-type binary)
EXPECTED="MyApp-linux-x64-c-exports-extended"
echo "ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME' (c-exports should NOT exclude c-exports-extended - exact match only)"
exit 1
fi
echo "Exact match only works: $ARTIFACT_NAME"
- name: Test action.yml integration pattern with whitespace in exclude-features
shell: bash
run: |
# Simulates the pattern used in action.yml where --exclude-features value is quoted
ARTIFACT_SCRIPT="./scripts/get-artifact-name.sh"
EXCLUDE_FEATURES_INPUT="c-exports, foo"
# This is the fixed pattern from action.yml: --exclude-features "value" (quoted)
ARTIFACT_NAME=$("$ARTIFACT_SCRIPT" \
--artifact-prefix "MyApp" \
--target x86_64-unknown-linux-gnu \
--features "c-exports,foo" \
--use-friendly-target-names true \
--exclude-features "$EXCLUDE_FEATURES_INPUT" \
--artifact-type binary)
EXPECTED="MyApp-linux-x64"
echo "ARTIFACT_NAME=$ARTIFACT_NAME"
if [[ "$ARTIFACT_NAME" != "$EXPECTED" ]]; then
echo "::error::Expected '$EXPECTED' but got '$ARTIFACT_NAME' (action.yml integration with whitespace should work)"
exit 1
fi
echo "action.yml integration pattern with whitespace works: $ARTIFACT_NAME"