Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NVIDIA/NeMo-Aligner
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.3.1
Choose a base ref
...
head repository: NVIDIA/NeMo-Aligner
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Loading
Showing with 20,936 additions and 2,304 deletions.
  1. +112 −0 .github/workflows/_run_test.yml
  2. +49 −0 .github/workflows/build-test-publish-wheel.yml
  3. +14 −0 .github/workflows/cherry-pick-release-commit.yml
  4. +163 −0 .github/workflows/cicd-main.yml
  5. +21 −0 .github/workflows/copyright-check.yml
  6. +33 −0 .github/workflows/release-freeze.yml
  7. +55 −0 .github/workflows/release.yaml
  8. +27 −0 .github/workflows/semantic-pull-request.yml
  9. +0 −1 .gitignore
  10. +6 −0 .pre-commit-config.yaml
  11. +112 −33 CHANGELOG.md
  12. +106 −31 Dockerfile
  13. +1 −0 MANIFEST.in
  14. +32 −23 README.md
  15. +420 −0 conftest.py
  16. +6 −4 docs/README.md
  17. BIN docs/assets/cai_diagram.png
  18. BIN docs/assets/cai_flow.png
  19. +5 −0 docs/user-guide-experimental/README.md
  20. +0 −187 docs/user-guide/DPO.rst
  21. +0 −176 docs/user-guide/DRaFTP.rst
  22. +0 −2 docs/user-guide/ModelAlignment.rsts
  23. +0 −348 docs/user-guide/SteerLM.rst
  24. +6 −0 docs/user-guide/aligner-algo-header.rst
  25. +374 −0 docs/user-guide/cai.rst
  26. +287 −0 docs/user-guide/dpo.rst
  27. +269 −0 docs/user-guide/draftp.rst
  28. +39 −0 docs/user-guide/evaluation.rst
  29. +151 −22 docs/user-guide/index.rst
  30. +371 −0 docs/user-guide/knowledge-distillation.rst
  31. +61 −0 docs/user-guide/nemoaligner.rsts
  32. +256 −0 docs/user-guide/reinforce.rst
  33. +125 −44 docs/user-guide/{RLHF.rst → rlhf.rst}
  34. +232 −0 docs/user-guide/rs.rst
  35. +87 −57 docs/user-guide/{SFT.rst → sft.rst}
  36. +34 −30 docs/user-guide/{SPIN.rst → spin.rst}
  37. +491 −0 docs/user-guide/steerlm.rst
  38. +175 −0 docs/user-guide/steerlm2.rst
  39. +254 −0 examples/mm/clip/conf/baseline.yaml
  40. +120 −0 examples/mm/clip/test_reward_model.py
  41. +44 −0 examples/mm/clip/train_reward_model.py
  42. +324 −0 examples/mm/stable_diffusion/anneal_sdxl.py
  43. +1 −2 examples/mm/stable_diffusion/conf/draftp_sd.yaml
  44. +281 −0 examples/mm/stable_diffusion/conf/draftp_sdxl.yaml
  45. +5 −4 examples/mm/stable_diffusion/train_sd_draftp.py
  46. +271 −0 examples/mm/stable_diffusion/train_sdxl_draftp.py
  47. +1 −0 examples/nlp/cai/CritiqueRevisionInstructions.json
  48. +616 −0 examples/nlp/cai/cai_utils.py
  49. +29 −0 examples/nlp/cai/conf/inference_service.yaml
  50. +56 −0 examples/nlp/cai/few_shot_samples_example.json
  51. +693 −0 examples/nlp/cai/generate_rl_cai_dataset.py
  52. +579 −0 examples/nlp/cai/generate_sl_cai_dataset.py
  53. +269 −0 examples/nlp/cai/process_anthropic_hh_using_chat_prompt.py
  54. +54 −0 examples/nlp/cai/sys_prompt_constitution
  55. +270 −0 examples/nlp/data/dpo/prepare_packed_dpo_dataset.py
  56. +123 −0 examples/nlp/data/kto/preprocess_anthropichh_data.py
  57. +109 −0 examples/nlp/data/sft/remove_long_dialogues.py
  58. +4 −8 examples/nlp/data/steerlm/attribute_annotate.py
  59. +124 −0 examples/nlp/data/steerlm/preprocess_helpsteer2_data.py
  60. +15 −5 examples/nlp/gpt/conf/gpt_dpo.yaml
  61. +119 −0 examples/nlp/gpt/conf/gpt_knowledge_distillation.yaml
  62. +130 −0 examples/nlp/gpt/conf/gpt_kto.yaml
  63. +53 −10 examples/nlp/gpt/conf/gpt_ppo_actor.yaml
  64. +27 −2 examples/nlp/gpt/conf/gpt_ppo_critic.yaml
  65. +216 −0 examples/nlp/gpt/conf/gpt_reinforce_actor.yaml
  66. +180 −0 examples/nlp/gpt/conf/gpt_rs_actor.yaml
  67. +9 −3 examples/nlp/gpt/conf/gpt_sft.yaml
  68. +2 −3 examples/nlp/gpt/conf/gpt_spin.yaml
  69. +29 −1 examples/nlp/gpt/conf/inference_rm.yaml
  70. +15 −5 examples/nlp/gpt/conf/training_rm.yaml
  71. +17 −4 examples/nlp/gpt/serve_ppo_critic.py
  72. +22 −42 examples/nlp/gpt/serve_reward_model.py
  73. +23 −17 examples/nlp/gpt/train_gpt_dpo.py
  74. +205 −0 examples/nlp/gpt/train_gpt_knowledge_distillation.py
  75. +163 −0 examples/nlp/gpt/train_gpt_kto.py
  76. +27 −12 examples/nlp/gpt/train_gpt_ppo_actor.py
  77. +198 −0 examples/nlp/gpt/train_gpt_reinforce_actor.py
  78. +170 −0 examples/nlp/gpt/train_gpt_rs_actor.py
  79. +7 −75 examples/nlp/gpt/train_gpt_sft.py
  80. +3 −2 examples/nlp/gpt/train_gpt_spin.py
  81. +13 −3 examples/nlp/gpt/train_reward_model.py
  82. +284 −0 examples/nlp/gpt/train_steerlm2.py
  83. +156 −0 examples/nlp/synthetic_data_gen/compute_topk_logits.py
  84. +101 −0 examples/nlp/synthetic_data_gen/conf/compute_topk_logits.yaml
  85. +23 −0 nemo_aligner/__init__.py
  86. +73 −33 nemo_aligner/algorithms/critic_server_trainer.py
  87. +71 −10 nemo_aligner/algorithms/dpo.py
  88. +136 −0 nemo_aligner/algorithms/kto.py
  89. +327 −211 nemo_aligner/algorithms/ppo.py
  90. +599 −0 nemo_aligner/algorithms/reinforce.py
  91. +134 −0 nemo_aligner/algorithms/reward_server.py
  92. +478 −0 nemo_aligner/algorithms/rs.py
  93. +45 −6 nemo_aligner/algorithms/spin.py
  94. +19 −2 nemo_aligner/algorithms/supervised.py
  95. +144 −0 nemo_aligner/data/mm/pickscore_dataset.py
  96. +166 −23 nemo_aligner/data/nlp/builders.py
  97. +577 −48 nemo_aligner/data/nlp/datasets.py
  98. +68 −0 nemo_aligner/data/nlp/scripts/undo_special_tokens.py
  99. 0 nemo_aligner/data/nlp/tests/__init__.py
  100. +315 −0 nemo_aligner/data/nlp/tests/cai_utils_test.py
  101. +536 −0 nemo_aligner/data/nlp/tests/datasets_test.py
  102. +50 −0 nemo_aligner/experimental/README.md
  103. 0 nemo_aligner/experimental/__init__.py
  104. +146 −7 nemo_aligner/models/mm/stable_diffusion/image_text_rms.py
  105. +96 −6 nemo_aligner/models/mm/stable_diffusion/megatron_sd_draftp_model.py
  106. +558 −0 nemo_aligner/models/mm/stable_diffusion/megatron_sdxl_draftp_model.py
  107. +5 −4 nemo_aligner/models/nlp/gpt/gpt_reward_model.py
  108. +16 −6 nemo_aligner/models/nlp/gpt/gpt_sft_model.py
  109. +239 −0 nemo_aligner/models/nlp/gpt/gpt_steerlm_model.py
  110. +25 −17 nemo_aligner/models/nlp/gpt/megatron_gpt_critic.py
  111. +332 −103 nemo_aligner/models/nlp/gpt/megatron_gpt_dpo_model.py
  112. +211 −0 nemo_aligner/models/nlp/gpt/megatron_gpt_knowledge_distillation.py
  113. +419 −0 nemo_aligner/models/nlp/gpt/megatron_gpt_kto_model.py
  114. +135 −89 nemo_aligner/models/nlp/gpt/megatron_gpt_ppo_actor.py
  115. +51 −2 nemo_aligner/models/nlp/gpt/megatron_gpt_regression_reward_model.py
  116. +393 −0 nemo_aligner/models/nlp/gpt/megatron_gpt_reinforce_actor.py
  117. +44 −67 nemo_aligner/models/nlp/gpt/megatron_gpt_reward_model.py
  118. +261 −0 nemo_aligner/models/nlp/gpt/megatron_gpt_rs_actor.py
  119. +2 −2 nemo_aligner/models/nlp/gpt/megatron_gpt_spin_model.py
  120. +56 −9 nemo_aligner/models/nlp/gpt/reward_critic_clients.py
  121. +14 −7 nemo_aligner/package_info.py
  122. +5 −0 nemo_aligner/servers/http_communicator.py
  123. +0 −106 nemo_aligner/servers/server_callables.py
  124. +109 −0 nemo_aligner/testing/utils.py
  125. +0 −2 nemo_aligner/utils/__init__.py
  126. +145 −0 nemo_aligner/utils/batch_iterators.py
  127. +646 −38 nemo_aligner/utils/distributed.py
  128. +105 −0 nemo_aligner/utils/parallel_state.py
  129. +54 −1 nemo_aligner/utils/ppo_utils.py
  130. +58 −0 nemo_aligner/utils/server_utils.py
  131. 0 nemo_aligner/utils/tests/__init__.py
  132. +421 −0 nemo_aligner/utils/tests/distributed_test.py
  133. +21 −1 tests/test_ppo_utils.py → nemo_aligner/utils/tests/ppo_utils_test.py
  134. +114 −0 nemo_aligner/utils/tests/text_generation_utils_test.py
  135. 0 tests/test_trainer_utils.py → nemo_aligner/utils/tests/trainer_utils_test.py
  136. +84 −0 nemo_aligner/utils/tests/trt_llm_test.py
  137. 0 tests/test_utils.py → nemo_aligner/utils/tests/utils_test.py
  138. +32 −36 nemo_aligner/utils/text_generation_utils.py
  139. +9 −1 nemo_aligner/utils/train_script_utils.py
  140. +29 −9 nemo_aligner/utils/train_utils.py
  141. +11 −2 nemo_aligner/utils/trainer_utils.py
  142. +231 −0 nemo_aligner/utils/trt_llm.py
  143. +123 −21 nemo_aligner/utils/utils.py
  144. +0 −2 requirements.txt
  145. +1 −1 setup.py
  146. +8 −0 setup/requirements.txt
  147. +175 −0 setup/trtllm.patch
  148. 0 tests/__init__.py
  149. +0 −47 tests/conftest.py
  150. +69 −0 tests/functional/dpo.sh
  151. +101 −0 tests/functional/kd.sh
  152. +209 −0 tests/functional/ppo.sh
  153. +178 −0 tests/functional/reinforce.sh
  154. +93 −0 tests/functional/rm.sh
  155. +45 −0 tests/functional/run_all.sh
  156. +94 −0 tests/functional/sft.sh
  157. +24 −0 tests/functional/test_cases/dpo-llama3
  158. +26 −0 tests/functional/test_cases/dpo-llama3-pack
  159. +7 −0 tests/functional/test_cases/kd-llama3
  160. +29 −0 tests/functional/test_cases/ppo-llama3-pp2-reshard
  161. +28 −0 tests/functional/test_cases/reinforce-llama3-pp2-reshard
  162. +24 −0 tests/functional/test_cases/rm-llama3
  163. +24 −0 tests/functional/test_cases/sft-llama3
  164. +100 −0 tests/functional/test_data/dummy-dpo.jsonl
  165. +30 −0 tests/functional/test_data/dummy-sft.jsonl
  166. BIN tests/functional/test_data/dummy_dpo_packed_90.npy
  167. +50 −0 tests/functional/test_data/synthetic-123.jsonl
  168. +50 −0 tests/functional/test_data/synthetic-kd.jsonl
  169. +8 −0 tests/functional/test_data/test-rm.jsonl
  170. +3 −0 tests/functional_experimental/README.md
  171. 0 tests/functional_experimental/test_cases/.gitkeep
  172. 0 tests/functional_experimental/test_data/.gitkeep
  173. +34 −0 tests/run_mpi_unit.sh
  174. +34 −0 tests/run_unit.sh
  175. +0 −229 tests/test_distributed.py
112 changes: 112 additions & 0 deletions .github/workflows/_run_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
name: ~test template

on:
workflow_call:
inputs:
RUNNER:
type: string
description: Runner to use for test
required: true
TIMEOUT:
type: number
description: Max runtime of test in minutes
required: false
default: 10
SCRIPT:
type: string
description: Test script to execute
required: true
AFTER_SCRIPT:
type: string
description: Script to run after main test
required: false
default: ":"
IS_OPTIONAL:
type: boolean
description: Failure will cancel all other tests if set to true
required: false
default: false
outputs:
conclusion:
description: Conclusion of main test step
value: ${{ jobs.main.outputs.conclusion }}
log:
description: Last 2000 characters of the test step's log
value: ${{ jobs.main.outputs.log }}
jobs:

main:
runs-on: ${{ inputs.RUNNER }}
outputs:
conclusion: ${{ steps.main.conclusion }}
log: ${{ steps.main.outputs.log }}
steps:
- name: Docker system cleanup
run: |
docker system prune -a --filter "until=48h" --force || true
- name: Docker pull image
run: |
docker pull nemoci.azurecr.io/nemo_aligner_container:${{ github.run_id }}
- name: Start container
run: |
docker run --rm -d --name nemo_container_${{ github.run_id }} --runtime=nvidia --gpus all --shm-size=64g \
--env TRANSFORMERS_OFFLINE=0 \
--env HYDRA_FULL_ERROR=1 \
--env HF_HOME=/home/TestData/aligner/hf_home \
--env ALIGNER_CI_DIR=/home/TestData/aligner \
--env ALIGNER_REPO_DIR=/opt/NeMo-Aligner \
--volume /mnt/datadrive/TestData/aligner/checkpoints:/home/TestData/aligner/checkpoints:ro \
--volume /mnt/datadrive/TestData/aligner/hf_home/hub:/home/TestData/aligner/hf_home/hub:ro \
nemoci.azurecr.io/nemo_aligner_container:${{ github.run_id }} \
bash -c "sleep $(( ${{ inputs.TIMEOUT }} * 60 + 60 ))"
- id: main
name: Run main script
timeout-minutes: ${{ inputs.TIMEOUT }}
run: |
# Print the host driver for debugging
nvidia-smi
mkdir -p ${{ github.run_id }}
cd ${{ github.run_id }}/
set +e
(
set -e
cmd=$(cat <<"RUN_TEST_EOF"
nvidia-smi
# Sanity check the driver/cuda combo
cudaCheck
# In case git commands need to be run inside Aligner
git config --global --add safe.directory $ALIGNER_REPO_DIR
${{ inputs.SCRIPT }}
RUN_TEST_EOF
)
docker exec nemo_container_${{ github.run_id }} bash -eux -o pipefail -c "$cmd"
) 2> >(tee err.log)
EXIT_CODE=$?
echo "log=$(tail -c 2000 err.log | base64 -w 0)" >> "$GITHUB_OUTPUT"
exit $EXIT_CODE
- uses: "NVIDIA/NeMo/.github/actions/cancel-workflow@main"
if: failure() && inputs.IS_OPTIONAL == false

- name: after_script
if: always() && inputs.AFTER_SCRIPT != ':'
run: |
cmd=$(cat <<"RUN_TEST_EOF"
${{ inputs.AFTER_SCRIPT }}
RUN_TEST_EOF
)
docker exec nemo_container_${{ github.run_id }} bash -eux -o pipefail -c "$cmd"
- name: Container shutdown
if: always()
run: |
docker container stop nemo_container_${{ github.run_id }} || true
docker container rm nemo_container_${{ github.run_id }} || true
49 changes: 49 additions & 0 deletions .github/workflows/build-test-publish-wheel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Copyright (c) 2020-2021, NVIDIA CORPORATION.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Build, test, and publish a PyPi wheel (to testpypi)

on:
push:
branches:
- main
- 'r**'

defaults:
run:
shell: bash -x -e -u -o pipefail {0}

jobs:
build-test-publish-wheel:
uses: NVIDIA/NeMo-FW-CI-templates/.github/workflows/_build_test_publish_wheel.yml@v0.12.2
with:
image-name: nemo_container
dockerfile: Dockerfile
image-label: nemo-aligner
build-args: |
IMAGE_LABEL=nemo-aligner
MAX_JOBS=32
ALIGNER_COMMIT=${{ github.event.pull_request.head.sha || github.sha }}
prune-filter-timerange: 24h
dry-run: true
python-package: nemo_aligner
container-workdir: /opt/NeMo-Aligner
environment: public
secrets:
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
SLACK_WEBHOOK_ADMIN: ${{ secrets.SLACK_WEBHOOK_ADMIN }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}


14 changes: 14 additions & 0 deletions .github/workflows/cherry-pick-release-commit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Create PR to main with cherry-pick from release

on:
push:
branches:
- main

jobs:
cherry-pick:
uses: NVIDIA/NeMo-FW-CI-templates/.github/workflows/_cherry_pick.yml@v0.6.0
secrets:
PAT: ${{ secrets.PAT }}
SLACK_WEBHOOK_ADMIN: ${{ secrets.SLACK_WEBHOOK_ADMIN }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
163 changes: 163 additions & 0 deletions .github/workflows/cicd-main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
# Copyright (c) 2020-2021, NVIDIA CORPORATION.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: "CICD NeMo Aligner"

on:
pull_request:
branches:
- 'main'
- 'r**'
- 'dev'
types: [labeled]
merge_group:
types: [checks_requested]
workflow_dispatch:
inputs:
test_to_run:
required: false
default: all
type: string
description: Comma-separated list of tests to run. Use "all" to run the full test suite.
push:
branches:
- 'main'

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

jobs:
pre-flight:
runs-on: ubuntu-latest
outputs:
test_to_run: ${{ steps.test_to_run.outputs.main }}
all: ${{ steps.all.outputs.main }}
run_ci: ${{ steps.evaluate.outputs.run_ci }}
steps:
- name: Parse test_to_run
id: test_to_run
run: |
parsed_string=$(echo ${{ inputs.test_to_run || 'all' }} | jq -c --raw-input 'split(",")')
echo "main=${parsed_string}" | tee -a "$GITHUB_OUTPUT"
- name: Parse all
id: all
run: |
echo "main=${{ contains(fromJSON(steps.test_to_run.outputs.main), 'all') }}" | tee -a "$GITHUB_OUTPUT"
- name: Get changed files
id: changed-files
if: github.event_name == 'pull_request'
uses: tj-actions/changed-files@v44
with:
files_yaml: |
doc:
- '**.md'
- docs/**
src:
- '!**.md'
- '!docs/**'
- name: Evaluate conditions
id: evaluate
env:
DOCS_ONLY: ${{ steps.changed-files.outputs.doc_any_changed == 'true' && steps.changed-files.outputs.src_any_changed == 'false' }}
CHANGED_DOCS: ${{ steps.changed-files.outputs.doc_all_changed_files }}
CHANGED_SRC: ${{ steps.changed-files.outputs.src_all_changed_files }}
IS_PULLREQUEST: ${{ github.event_name == 'pull_request' }}
LABEL: ${{ github.event.label.name == 'Run CICD' }}
MERGE_GROUP: ${{ github.event_name == 'merge_group' }}
run: |
# Some output that's helpful for debugging
echo "Docs changed: $CHANGED_DOCS"
echo "Src changed: $CHANGED_SRC"
echo "DOCS_ONLY: $DOCS_ONLY"
echo "LABEL: $LABEL"
echo "IS_PULLREQUEST: $IS_PULLREQUEST"
# Run CI only (on main or if label is attached) and if it's not only docs
echo run_ci=$([[ ("$LABEL" = "true" || "$IS_PULLREQUEST" = "false" || "$MERGE_GROUP" = "true") && "$DOCS_ONLY" = "false" ]] && echo "true" || echo "false") | tee -a "$GITHUB_OUTPUT"
build-container:
if: ${{ needs.pre-flight.outputs.run_ci == 'true' }}
needs: [pre-flight]
uses: NVIDIA/NeMo-FW-CI-templates/.github/workflows/_build_container.yml@v0.1.0
with:
image-name: nemo_aligner_container
dockerfile: Dockerfile
image-label: nemo-aligner
build-args: |
MAX_JOBS=32
ALIGNER_COMMIT=${{ github.sha }}
Unit_Tests:
name: ${{ matrix.test_case }}
needs: [build-container, pre-flight]
uses: ./.github/workflows/_run_test.yml
if: ${{ needs.pre-flight.outputs.run_ci == 'true' }}
strategy:
matrix:
test_case:
- run_unit.sh
- run_mpi_unit.sh
with:
RUNNER: self-hosted-azure
TIMEOUT: 10
SCRIPT: |
nvidia-smi
cd ${ALIGNER_REPO_DIR}
bash tests/${{ matrix.test_case }}
Functional_Tests:
name: ${{ matrix.test_case }}
needs: [build-container, pre-flight]
uses: ./.github/workflows/_run_test.yml
if: ${{ needs.pre-flight.outputs.run_ci == 'true' }}
strategy:
matrix:
test_case:
- ppo-llama3-pp2-reshard
- reinforce-llama3-pp2-reshard
- dpo-llama3
- dpo-llama3-pack
- kd-llama3
- sft-llama3
- rm-llama3
with:
RUNNER: self-hosted-azure
# Fairly aggresive timeout that all functional tests should try to adhere to
TIMEOUT: 8
SCRIPT: |
bash /opt/NeMo-Aligner/tests/functional/test_cases/${{ matrix.test_case }}
CI_QA_Gate:
name: CI quality check
if: always()
runs-on: ubuntu-latest
needs:
- Unit_Tests
- Functional_Tests
steps:
- name: main
env:
JOB_RESULTS: ${{ toJSON(needs) }}
ALL_SUCCESS: ${{ !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && !contains(needs.*.result, 'skipped') }}
CI_SKIP: ${{ github.event.label.name == 'Skip CICD' }}
run: |
SUMMARY=$(echo $JOB_RESULTS | jq 'to_entries[] | .key + ": " + .value.result' | tr -d '"')
echo '🤖: CICD Result' >> $GITHUB_STEP_SUMMARY
echo "$SUMMARY" >> $GITHUB_STEP_SUMMARY
test "$ALL_SUCCESS" = "true" || test "$CI_SKIP" = "true"
21 changes: 21 additions & 0 deletions .github/workflows/copyright-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright (c) 2020-2021, NVIDIA CORPORATION.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Copyright check

on:
pull_request:

jobs:
copyright-check:
uses: NVIDIA/NeMo-FW-CI-templates/.github/workflows/_copyright_check.yml@v0.2.0
Loading