Test Artifact Names #43
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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" |