Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
545db96
chore: test CI workflow trigger for project structure exploration
Mar 9, 2026
5e1ad3f
add 3rdparty
Mar 10, 2026
6e91eec
add 3rdparty for running
qqjxzxq Mar 10, 2026
e5b5e17
add workflow_dispatch
qqjxzxq Mar 10, 2026
2915197
build cuda config and struct
qqjxzxq Mar 10, 2026
0197046
[CICD] add metax config and tests
zhoujiamei Mar 13, 2026
84a2cc2
[CICD] change all test cuda & ascend
zhoujiamei Mar 13, 2026
b5d2427
fix: adapt torchrun to dynamic GPU count
zhoujiamei Mar 13, 2026
11718bd
fix: force docker to use local image with --pull never
zhoujiamei Mar 13, 2026
5b4c3e2
fix:add image-pull-policy: never
qqjxzxq Mar 13, 2026
a270eaf
change tag as localhost
qqjxzxq Mar 13, 2026
73eb570
tag as localhost:5000
zhoujiamei Mar 13, 2026
79ad70a
fix: use local registry image and dynamic gpu count for C500
zhoujiamei Mar 13, 2026
af64379
delete gpu host
zhoujiamei Mar 13, 2026
b8da525
delete gpu all
zhoujiamei Mar 13, 2026
b5d0826
Modify comments
Mar 17, 2026
99fd037
add functional test config
Mar 18, 2026
ad05fe5
add all tests common for functional tests
Mar 18, 2026
27cda22
set path for mcc
Mar 18, 2026
0231710
fix utils for metax
Mar 18, 2026
c88f447
back to unit test
Mar 19, 2026
c0c75d1
add L0 unit test
Mar 19, 2026
a77c183
fix L0 unit test
Mar 19, 2026
14b445c
L0 pytorch wheel for functional test; gitignore
BrianPei Mar 19, 2026
19eacbb
Check if tests should run
Mar 19, 2026
1cac161
Merge branch 'main' of github.com:BrianPei/TransformerEngine-FL
Mar 19, 2026
ca47247
force run all tests for debugging
Mar 19, 2026
efafa63
set inputs.setup_commands from all_tests_metax.yml
Mar 19, 2026
67ef5dd
add setup_commands for all_tests_common
Mar 19, 2026
3c9394f
force detect changes
Mar 19, 2026
4dc2722
detect .github
Mar 19, 2026
502aa7f
fix conda path
Mar 19, 2026
746f39f
export conda path
Mar 19, 2026
f72d678
add log to debug
Mar 19, 2026
888867b
speed up download
Mar 19, 2026
74c441d
change timeout minutes
Mar 19, 2026
315cbf2
more time needed
Mar 19, 2026
cb5c50a
no-build-isolation
Mar 19, 2026
82c66c1
export path
Mar 19, 2026
f68b94d
export path change
Mar 19, 2026
c2b78df
add cmake install and skip cuda
Mar 19, 2026
7aac806
debug qa L0 unit_tests on metax
BrianPei Mar 20, 2026
7407cad
fix unit_tests excute script
BrianPei Mar 20, 2026
f011fb7
just run L0_pytorch_debug_unittest; add debug step
BrianPei Mar 20, 2026
59df094
fix metax container config
BrianPei Mar 20, 2026
816a044
install git when setpu
Mar 23, 2026
94967e7
delete skip cuda
Mar 23, 2026
6048655
delete original te & install transformer_engine_metax
Mar 23, 2026
bccb413
add home/muxiuser
Mar 23, 2026
9969192
--no-deps
Mar 23, 2026
1cfbe16
symbolic link for import transformer_engine_torch
Mar 23, 2026
4656c90
fix import error
Mar 23, 2026
ec2fe35
fix nvdlfw_inspect install
Mar 23, 2026
10b7a9c
delete uninstall nvdlfw-inspect in test.sh
Mar 23, 2026
1338cf8
test lint
Mar 23, 2026
80f4263
test wheel
Mar 23, 2026
91a3300
test unittest
Mar 23, 2026
47b0db0
check torch.cuda.is_available()
Mar 23, 2026
448de78
add dev path
Mar 23, 2026
a90bf0b
add dev path2
Mar 23, 2026
8188747
map home/muxiuser
Mar 23, 2026
f0f7bf4
map home/muxiuser2
Mar 23, 2026
de7ed03
--device=/dev/dri:/dev/dri
Mar 23, 2026
3e89fa0
run for test
Mar 23, 2026
79f508c
try build te & check version
BrianPei Mar 23, 2026
95aab66
Platform-specific build environment variables
BrianPei Mar 23, 2026
490fc7e
run for test
Mar 24, 2026
8ceba83
Merge branch 'main' of github.com:BrianPei/TransformerEngine-FL
Mar 24, 2026
5fcb8ed
add more docker config
Mar 24, 2026
681e16f
delete net host
Mar 24, 2026
4fe67b9
delete #
Mar 24, 2026
2ccdd53
delete hostname
Mar 24, 2026
b2dafd7
add ln -sf
Mar 24, 2026
bfd7a32
attach to data
Mar 24, 2026
93d84a2
rewrite
Mar 24, 2026
0d660a8
run in own container
Mar 24, 2026
e95812c
docker run in workflow
Mar 24, 2026
4f813c5
docker run in workflow
Mar 24, 2026
9e3e890
no result
Mar 24, 2026
2acab35
back to origin
Mar 24, 2026
7ebc2f8
unit_tests_common,check platform
BrianPei Mar 24, 2026
d687515
skip install .whl if it exist
Mar 24, 2026
45b49e6
skip install .whl if it exist
Mar 24, 2026
eba5af3
skip install .whl
Mar 24, 2026
c98f79e
again
Mar 24, 2026
1f7583b
again.
Mar 24, 2026
7b6858e
cuda platform add source conda
BrianPei Mar 24, 2026
b527546
try to install te
Mar 24, 2026
7bd355e
try to install te
Mar 24, 2026
8e51ac5
service ssh restart
Mar 24, 2026
dd0a408
ln -s
Mar 24, 2026
db0f785
turn back
Mar 24, 2026
6c47459
turn to lint
Mar 24, 2026
571b56b
test
Mar 24, 2026
df71628
fix cuda platform logic
BrianPei Mar 24, 2026
d0d59ae
fix platform env miss
BrianPei Mar 24, 2026
c5a062b
fix unit_tests script
BrianPei Mar 24, 2026
410ed94
fix script IndentationError
BrianPei Mar 24, 2026
c131403
remove active python step
BrianPei Mar 24, 2026
a9f5699
fix excute tests env
BrianPei Mar 24, 2026
13444b6
remove cuda container mount
BrianPei Mar 25, 2026
22bc235
fix cuda container_volumes
BrianPei Mar 25, 2026
900c37f
network host
Mar 25, 2026
5fae5cd
add TE_FL_PREFER: vendor; install nvdlfw-inspect
BrianPei Mar 25, 2026
6e22262
a new build for workflow
Mar 25, 2026
e0fa383
a new build for workflow
Mar 25, 2026
5a635f3
delete sth for root
Mar 25, 2026
65e1e84
creat a container for deteting
Mar 25, 2026
c8faeb6
no checkout source code
Mar 25, 2026
e0e4b6a
git clone
Mar 25, 2026
5515026
git install
Mar 25, 2026
3e47700
check
Mar 25, 2026
23f0603
reset docker option
Mar 25, 2026
afdf0d2
check
Mar 25, 2026
f22cc18
check
Mar 25, 2026
5e00a83
check name
Mar 25, 2026
2ff2ac8
check name
Mar 25, 2026
d52168a
check name
Mar 25, 2026
07f13b9
setuptools and sed git clone nvdlfw-inspect
Mar 25, 2026
7bde6d9
http1.1
Mar 25, 2026
3778a95
git clone
Mar 25, 2026
c9992f8
activate conda
Mar 25, 2026
9188ad5
use actions/checkout@v4
Mar 25, 2026
a3fa59c
add TE_LIB_PATH
BrianPei Mar 25, 2026
d74417d
fix TE_LIB_PATH
BrianPei Mar 25, 2026
0dfeff5
change TE_LIB_PATH
BrianPei Mar 26, 2026
1e77251
add more L0 cases
BrianPei Mar 26, 2026
f353b3a
change place
Mar 26, 2026
96882f5
setputool
Mar 26, 2026
6f2a1ee
turn back
Mar 26, 2026
d675bb3
ignore L0_pytorch_whell cases
BrianPei Mar 26, 2026
ca4281f
delete /opt/maca:/opt/maca
Mar 27, 2026
213c9d7
delete /opt/maca:/opt/maca and host
Mar 27, 2026
4f9882e
delete MACA_VISIBLE_DEVICES=all
Mar 27, 2026
6a8c4b7
Excluding certain test cases
Mar 27, 2026
dd398e3
check pytorch_unittest
BrianPei Mar 28, 2026
9be90cb
ignore some L0 unit cases on metax can't pass now
BrianPei Mar 28, 2026
8646d69
Merge branch 'cuda_dev'
Mar 30, 2026
ac77020
Disabled the keep container alive on failure
Mar 30, 2026
5e18bce
fix Chinese
Mar 30, 2026
d6ed58c
Revert changes to utils.py
Mar 31, 2026
b67a6cd
ignore logic on metax
Mar 31, 2026
3fe8604
ignore some unittest on metax
Mar 31, 2026
0732040
ignore unittest logic on metax
Mar 31, 2026
df6799a
delete the volumes about home/muxiuser
Mar 31, 2026
aa45e58
change workspace path as
Mar 31, 2026
a39f49e
fixed format
Mar 31, 2026
12ef96c
remove chinese commet & failure debug step
BrianPei Mar 31, 2026
cfdf56a
add coverage report step
BrianPei Mar 31, 2026
a93796f
fix license action
BrianPei Mar 31, 2026
0f31313
set cuda env; generate coverage report
BrianPei Mar 31, 2026
c56bbf2
fix coverage collection
BrianPei Mar 31, 2026
338414d
install curl for upload coverage; active python
BrianPei Apr 1, 2026
e7318f5
check FlagCICD connection before upload coverage
BrianPei Apr 1, 2026
5b02a7a
add pytest
qqjxzxq Apr 1, 2026
cb613b2
fix network timeout
qqjxzxq Apr 1, 2026
26557d6
only ignore some tests about Core Unit Tests
qqjxzxq Apr 1, 2026
6cdb75a
ignore some tests
qqjxzxq Apr 1, 2026
ad27a07
pass cuda L0
qqjxzxq Apr 1, 2026
f601ad9
pass L0 test
qqjxzxq Apr 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/configs/ascend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Huawei Ascend NPU configuration
image: ascend-infer:ubuntu18.04
labels:
- npu
- ascend
docker_options: |
--device /dev/davinci0
--device /dev/davinci1
--device /dev/davinci2
--device /dev/davinci3
--device /dev/davinci_manager
--device /dev/devmm_svm
--device /dev/hisi_hdc
--volume /usr/local/Ascend/driver:/usr/local/Ascend/driver
--volume /usr/local/Ascend/add-ons:/usr/local/Ascend/add-ons
60 changes: 60 additions & 0 deletions .github/configs/cuda.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# CUDA Hardware Configuration for TransformerEngine-FL
# Refactored for BAAI DGX A100 Nodes
# This file defines environment variables, volumes, and test filters for TE tests.

hardware_name: cuda
display_name: "NVIDIA CUDA (A100)"

ci_image: harbor.baai.ac.cn/flagscale/cuda12.8.1-torch2.7.1-python3.10-te2.9:20260209

# Runner labels for self-hosted A100 node
runner_labels:
- self-hosted
- Linux
- X64
- nvidia
- gpu-8

# Container volumes
container_volumes:
- .:/opt/transformerengine
- ./ci_logs:/logs
- /home/flagscale_cicd/data:/opt/data

# Container options
container_options: >-
--privileged
--gpus all
--shm-size=500g
--ipc=host
--ulimit memlock=-1
--ulimit stack=67108864
--user root

# Device types
device_types:
- a100

# Environment variables
env_vars:
NVTE_FRAMEWORK: pytorch
TE_WITH_NCCL: 1
NVTE_PROJECT_BUILDING: 1
TE_FL_SKIP_CUDA: 0

# Test matrix configuration
test_matrix:
l0_pytorch:
path: "qa/L0_pytorch_unittest/test.sh"
ignored_tests:
- test_sanity_layernorm_mlp
- test_sanity_gpt
- test_sanity_bert
- test_sanity_T5
- test_sanity_amp_and_nvfuser
- test_sanity_drop_path
- test_layernorm_mlp_accuracy
- test_grouped_linear_accuracy
- test_gpt_accuracy
- test_basic_linear
- test_layer_norm
85 changes: 85 additions & 0 deletions .github/configs/metax.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# CUDA Hardware Configuration for Megatron-LM-FL
# This file defines CI/CD settings for CUDA-based testing
# Test configurations are defined in tests/test_utils/config/platforms/cuda.yaml

hardware_name: metax
display_name: 'Metax Tests'

# Docker image for this hardware
# ci_image: cr.metax-tech.com/public-ai-release/maca/megatron-lm:0.12.0-maca.ai3.3.0.11-torch2.6-py312-ubuntu22.04-amd64
ci_image: localhost:5000/megatron-lm-with-te:v1
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current image dose not integrate TE-FL, we should update it later

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This image should already have TE-FL integrated.


# Runner labels for this hardware
runner_labels:
- self-hosted
- Linux
- X64
- metax
# - gpu-8
- dev

# Container volumes (hardware-specific paths)
container_volumes:
# - /home/flagscale_cicd/flask/static:/workspace/report
# - /home/flagscale_cicd/flask/config:/workspace/config
# - /home/flagscale_cicd/docker/docker_build/docker_data:/home/gitlab-runner/data
# - /home/flagscale_cicd/docker/docker_build/docker_tokenizers:/home/gitlab-runner/tokenizers
# - /home/flagscale_cicd/docker/docker_build/docker_data/Megatron-LM/datasets:/opt/data/datasets
# - /home/flagscale_cicd/docker/docker_build/docker_tokenizers/Megatron-LM/tokenizers:/opt/data/tokenizers
# --- 新增:Transformer Engine 开发专用路径 ---
- /home/muxiuser/jinglong/TransformerEngine-FL:/workspace/TransformerEngine-FL # 开发仓库
- /home/muxiuser/jinglong:/opt/te_packages # 存放编译好的 TE 包,供测试安装使用
- /usr/local/maca:/usr/local/maca:ro # [关键] 挂载宿主机的 MACA 驱动库(设为只读),确保算子能跑

# Container options (hardware-specific settings)
container_options: '--privileged --shm-size=500g --hostname megatron_cicd --user root --ulimit nofile=65535:65535 '

# Device types to run tests on
device_types:
- C500

# Test matrix configuration
test_matrix:
unit:
devices:
- C500
# Ignored test files for unit tests
# These files will be skipped when running pytest
ignored_tests:
- tests/unit_tests/data/test_preprocess_data.py
- tests/unit_tests/dist_checkpointing/test_global_metadata_reuse.py
- tests/unit_tests/dist_checkpointing/test_optimizer.py
- tests/unit_tests/dist_checkpointing/test_nonpersistent.py
- tests/unit_tests/dist_checkpointing/test_optimizer.py
- tests/unit_tests/dist_checkpointing/test_safe_globals.py
- tests/unit_tests/dist_checkpointing/models/test_moe_experts.py
- tests/unit_tests/distributed/test_grad_sync_with_expert_parallel.py
- tests/unit_tests/distributed/test_mcore_fully_sharded_data_parallel.py
- tests/unit_tests/export/trtllm/test_distributed_fp8.py
- tests/unit_tests/export/trtllm/test_single_device_fp8.py
- tests/unit_tests/transformer/moe/test_a2a_token_dispatcher.py
- tests/unit_tests/test_inference.py
- tests/unit_tests/test_rl_utils.py
- tests/unit_tests/models/test_gpt_model.py
- tests/unit_tests/models/test_mamba_model.py
- tests/unit_tests/post_training/test_modelopt_module_spec.py
- tests/unit_tests/transformer/moe/test_aux_loss.py
- tests/unit_tests/transformer/moe/test_moe_layer_discrepancy.py
- tests/unit_tests/transformer/moe/test_routers.py
- tests/unit_tests/transformer/test_attention.py
- tests/unit_tests/transformer/test_attention_packed_seq.py
- tests/unit_tests/transformer/test_cuda_graphs.py
- tests/unit_tests/transformer/test_full_cuda_graph.py
- tests/unit_tests/transformer/test_multi_latent_attention.py
- tests/unit_tests/transformer/test_multi_token_prediction.py
- tests/unit_tests/transformer/test_retro_attention.py
- tests/unit_tests/transformer/test_transformer_block.py
- tests/unit_tests/transformer/test_transformer_block_custom_pgs.py
- tests/unit_tests/dist_checkpointing/test_local.py

# functional:
# train:
# - device: C500
# task: train
# model: gpt
# case: all
16 changes: 16 additions & 0 deletions .github/configs/template.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Configuration Template
# This file describes the structure for hardware-specific configurations.
#
# Fields:
# - image: Docker image to use for the runner
# - labels: List of labels for the runner
# - docker_options: Additional Docker options for mounting devices, volumes, etc.
#
# Example:
# image: <docker_image>
# labels:
# - <label1>
# - <label2>
# docker_options: |
# --option1 value1
# --option2 value2
32 changes: 32 additions & 0 deletions .github/workflows/all_tests_ascend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: ascend_tests

on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}-${{ github.actor }}
cancel-in-progress: true

jobs:
run_tests:
# Package manager and environment settings are read from .github/configs/ascend.yml
uses: ./.github/workflows/all_tests_common.yml
with:
platform: ascend

all_tests:
needs: run_tests
runs-on: ubuntu-latest
if: always()
steps:
- name: Verify workflow status
run: |
if [ "${{ needs.run_tests.result }}" != "success" ]; then
echo "❌ Tests workflow failed"
exit 1
fi
echo "✅ All tests passed!"
136 changes: 136 additions & 0 deletions .github/workflows/all_tests_common.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
name: Common All Tests

on:
workflow_call:
inputs:
platform:
required: true
type: string
description: Platform name (e.g., cuda, default)

jobs:
checkout_and_config:
defaults:
run:
shell: bash
runs-on: ubuntu-latest
outputs:
ci_image: ${{ steps.config.outputs.ci_image }}
runs_on: ${{ steps.config.outputs.runs_on }}
container_volumes: ${{ steps.config.outputs.container_volumes }}
container_options: ${{ steps.config.outputs.container_options }}
device_types: ${{ steps.config.outputs.device_types }}
train_test_matrix: ${{ steps.config.outputs.train_test_matrix }}
ignored_tests: ${{ steps.config.outputs.ignored_tests }}
steps:
- name: Checkout source code
uses: actions/checkout@v4

- name: Load platform configuration
id: config
run: |
set -euo pipefail

PLATFORM="${{ inputs.platform }}"
CONFIG_FILE=".github/configs/${PLATFORM}.yml"

# Install mikefarah/yq (v4) for YAML parsing
sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v4.45.1/yq_linux_amd64
sudo chmod +x /usr/local/bin/yq
/usr/local/bin/yq --version
echo "Loading configuration from $CONFIG_FILE"

# Read CI image
CI_IMAGE=$(yq '.ci_image' "$CONFIG_FILE")
echo "ci_image=$CI_IMAGE" >> $GITHUB_OUTPUT

# Read runner labels and format as JSON array
RUNS_ON=$(yq '.runner_labels | tojson(0)' "$CONFIG_FILE")
echo "runs_on=$RUNS_ON" >> $GITHUB_OUTPUT

# Read container volumes and format as JSON array
VOLUMES=$(yq '.container_volumes | tojson(0)' "$CONFIG_FILE")
echo "container_volumes=$VOLUMES" >> $GITHUB_OUTPUT

# Read container options
OPTIONS=$(yq '.container_options' "$CONFIG_FILE")
echo "container_options=$OPTIONS" >> $GITHUB_OUTPUT

# Read device types
DEVICE_TYPES=$(yq '.device_types | tojson(0)' "$CONFIG_FILE")
echo "device_types=$DEVICE_TYPES" >> $GITHUB_OUTPUT

# Read test matrix for training
TRAIN_MATRIX=$(yq '.test_matrix.functional.train | tojson(0)' "$CONFIG_FILE")
echo "train_test_matrix=$TRAIN_MATRIX" >> $GITHUB_OUTPUT

# Read ignored tests list from test_matrix.unit (default to empty array if not defined)
IGNORED_TESTS=$(yq '.test_matrix.unit.ignored_tests // [] | tojson(0)' "$CONFIG_FILE")
echo "ignored_tests=$IGNORED_TESTS" >> $GITHUB_OUTPUT

unit_tests:
needs: checkout_and_config
strategy:
fail-fast: false
matrix:
device: ${{ fromJson(needs.checkout_and_config.outputs.device_types) }}
uses: ./.github/workflows/unit_tests_common.yml
name: unit_tests
with:
platform: ${{ inputs.platform }}
device: ${{ matrix.device }}
image: ${{ needs.checkout_and_config.outputs.ci_image }}
runs_on: ${{ needs.checkout_and_config.outputs.runs_on }}
container_volumes: ${{ needs.checkout_and_config.outputs.container_volumes }}
container_options: ${{ needs.checkout_and_config.outputs.container_options }}
ignored_tests: ${{ needs.checkout_and_config.outputs.ignored_tests }}

# arguments.py not compatible with megatron-core-fl
# functional_tests_train:
# needs:
# - checkout_and_config
# - unit_tests
# if: fromJson(needs.checkout_and_config.outputs.train_test_matrix)[0] != null
# uses: ./.github/workflows/functional_tests_train.yml
# with:
# platform: ${{ inputs.platform }}
# test_matrix: ${{ needs.checkout_and_config.outputs.train_test_matrix }}
# image: ${{ needs.checkout_and_config.outputs.ci_image }}
# runs_on: ${{ needs.checkout_and_config.outputs.runs_on }}
# container_volumes: ${{ needs.checkout_and_config.outputs.container_volumes }}
# container_options: ${{ needs.checkout_and_config.outputs.container_options }}


all_tests_complete:
defaults:
run:
shell: bash
needs:
- checkout_and_config
- unit_tests
# - functional_tests_train
runs-on: ubuntu-latest
if: always()
steps:
- name: Verify all tests passed
run: |
# Check all test jobs (skip if not run)
failed=false

if [ "${{ needs.unit_tests.result }}" != "success" ]; then
echo "❌ Unit tests failed"
failed=true
fi

# # Only check functional tests if they ran
# if [ "${{ needs.functional_tests_train.result }}" != "success" ] && \
# [ "${{ needs.functional_tests_train.result }}" != "skipped" ]; then
# echo "❌ Training functional tests failed"
# failed=true
# fi

if [ "$failed" = "true" ]; then
exit 1
fi

echo "✅ All tests completed successfully!"
32 changes: 32 additions & 0 deletions .github/workflows/all_tests_cuda.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: cuda_tests

on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}-${{ github.actor }}
cancel-in-progress: true

jobs:
run_tests:
# Package manager and environment settings are read from .github/configs/cuda.yml
uses: ./.github/workflows/all_tests_common.yml
with:
platform: cuda

all_tests:
needs: run_tests
runs-on: ubuntu-latest
if: always()
steps:
- name: Verify workflow status
run: |
if [ "${{ needs.run_tests.result }}" != "success" ]; then
echo "❌ Tests workflow failed"
exit 1
fi
echo "✅ All tests passed!"
Loading
Loading