From c80ea18f08b0b6c91408686c198524b63cea704f Mon Sep 17 00:00:00 2001 From: Amrutha G Date: Wed, 30 Sep 2026 10:41:41 +0530 Subject: [PATCH 1/4] Add runner dependency lock bootstrap --- .../bootstrap-runner-dependency-lock.yml | 67 +++++++++++++++++++ Tooling/deployment/runner_dependencies.toml | 15 +++++ 2 files changed, 82 insertions(+) create mode 100644 .github/workflows/bootstrap-runner-dependency-lock.yml create mode 100644 Tooling/deployment/runner_dependencies.toml diff --git a/.github/workflows/bootstrap-runner-dependency-lock.yml b/.github/workflows/bootstrap-runner-dependency-lock.yml new file mode 100644 index 00000000..7949d57d --- /dev/null +++ b/.github/workflows/bootstrap-runner-dependency-lock.yml @@ -0,0 +1,67 @@ +name: Bootstrap Runner Dependency Lock + +on: + workflow_dispatch: + pull_request: + types: + - opened + - synchronize + - reopened + +jobs: + generate-lock: + name: Generate runner dependency lock + if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }} + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Generate initial lock in Ubuntu container + shell: bash + env: + VIPM_SERIAL_NUMBER: ${{ secrets.VIPM_SERIAL_NUMBER }} + VIPM_FULL_NAME: ${{ secrets.VIPM_FULL_NAME }} + VIPM_EMAIL: ${{ secrets.VIPM_EMAIL }} + run: | + docker run --rm \ + --volume "$GITHUB_WORKSPACE:/workspace" \ + --workdir /workspace \ + --env VIPM_SERIAL_NUMBER \ + --env VIPM_FULL_NAME \ + --env VIPM_EMAIL \ + ubuntu:24.04 \ + bash -euc ' + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get install -y ca-certificates wget + wget -q https://traffic.libsyn.com/secure/jkinc/vipm_26.3.1-4025_amd64.deb -O /tmp/vipm.deb + apt-get install -y /tmp/vipm.deb + + export VIPM_NONINTERACTIVE=1 + export NO_COLOR=1 + vipm activate \ + --serial-number "$VIPM_SERIAL_NUMBER" \ + --name "$VIPM_FULL_NAME" \ + --email "$VIPM_EMAIL" + vipm refresh + + project_dir="$(mktemp -d)" + trap "rm -rf $project_dir" EXIT + cp /workspace/Tooling/deployment/runner_dependencies.toml "$project_dir/vipm.toml" + cd "$project_dir" + vipm lock --labview-version 2021 --labview-bitness 64 + + mkdir -p /workspace/runner-dependency-lock-artifact + cp vipm.lock /workspace/runner-dependency-lock-artifact/runner_dependencies.lock + ' + + - name: Upload generated lock + if: always() + uses: actions/upload-artifact@v4 + with: + name: runner-dependency-lock + path: runner-dependency-lock-artifact/runner_dependencies.lock + if-no-files-found: error + retention-days: 7 \ No newline at end of file diff --git a/Tooling/deployment/runner_dependencies.toml b/Tooling/deployment/runner_dependencies.toml new file mode 100644 index 00000000..6afa224f --- /dev/null +++ b/Tooling/deployment/runner_dependencies.toml @@ -0,0 +1,15 @@ +[project] +name = "actor-framework-ci-runner-dependencies" +version = "1.0.0" +labview-version = "2021" + +[dev-dependencies] +jdp_science_jsontext = "1.9.0.124" +jdp_science_lib_common_utilities = "1.4.1.18" +jki_lib_caraya = "1.4.3.147" +jki_lib_state_machine = "2024.0.3.23" +jki_lib_vipm_api = "2020.0.3.80" +jki_rsc_toolkits_palette = "1.1-1" +sas_workshops_lib_lvbuildspec_for_g_cli = "1.2.0.99" +sas_workshops_lib_vipb_builder_for_g_cli = "1.1.5.42" +wiresmith_technology_lib_g_cli = "3.0.1.98" From ed86d230dac661a525b74e76d060fe852c8caca8 Mon Sep 17 00:00:00 2001 From: Amrutha G Date: Wed, 30 Sep 2026 11:14:58 +0530 Subject: [PATCH 2/4] Run lock bootstrap in NI LabVIEW Linux container --- .../bootstrap-runner-dependency-lock.yml | 82 +++++++++++-------- 1 file changed, 47 insertions(+), 35 deletions(-) diff --git a/.github/workflows/bootstrap-runner-dependency-lock.yml b/.github/workflows/bootstrap-runner-dependency-lock.yml index 7949d57d..b4b88c11 100644 --- a/.github/workflows/bootstrap-runner-dependency-lock.yml +++ b/.github/workflows/bootstrap-runner-dependency-lock.yml @@ -13,49 +13,61 @@ jobs: name: Generate runner dependency lock if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }} runs-on: ubuntu-latest + container: + image: nationalinstruments/labview:2026q1patch2-linux + + env: + LABVIEW_VERSION_YEAR: "2026" steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 + + - name: Create display setup script + run: | + cat > setup-display.sh << 'EOF' + TARGET_DISPLAY=:99 + export DISPLAY="$TARGET_DISPLAY" + if ! pgrep -x Xvfb > /dev/null; then + Xvfb "$TARGET_DISPLAY" -screen 0 1280x720x24 -ac +extension GLX +render -noreset \ + > /tmp/xvfb.log 2>&1 & + fi + # Without this marker file the LabVIEW Runtime Engine may not start properly. + mkdir -p /tmp/natinst && echo "1" > /tmp/natinst/LVContainer.txt + echo "$(pgrep -x Xvfb > /dev/null && echo "Xvfb running (DISPLAY=$TARGET_DISPLAY)" || echo "WARNING: Xvfb is required by vipm, but failed to start; DISPLAY=$DISPLAY may not work. Check /tmp/xvfb.log for details.")" + EOF + + - name: Install VIPM + run: | + wget -O /tmp/vipm.deb https://packages.jki.net/vipm/preview/vipm_latest_preview_amd64.deb + dpkg -i /tmp/vipm.deb + rm /tmp/vipm.deb + + - name: Activate VIPM + run: | + source setup-display.sh + vipm activate \ + --serial-number "${{ secrets.VIPM_SERIAL_NUMBER }}" \ + --name "${{ secrets.VIPM_FULL_NAME }}" \ + --email "${{ secrets.VIPM_EMAIL }}" - - name: Generate initial lock in Ubuntu container - shell: bash - env: - VIPM_SERIAL_NUMBER: ${{ secrets.VIPM_SERIAL_NUMBER }} - VIPM_FULL_NAME: ${{ secrets.VIPM_FULL_NAME }} - VIPM_EMAIL: ${{ secrets.VIPM_EMAIL }} + - name: Refresh package sources run: | - docker run --rm \ - --volume "$GITHUB_WORKSPACE:/workspace" \ - --workdir /workspace \ - --env VIPM_SERIAL_NUMBER \ - --env VIPM_FULL_NAME \ - --env VIPM_EMAIL \ - ubuntu:24.04 \ - bash -euc ' - export DEBIAN_FRONTEND=noninteractive - apt-get update - apt-get install -y ca-certificates wget - wget -q https://traffic.libsyn.com/secure/jkinc/vipm_26.3.1-4025_amd64.deb -O /tmp/vipm.deb - apt-get install -y /tmp/vipm.deb + source setup-display.sh + vipm refresh - export VIPM_NONINTERACTIVE=1 - export NO_COLOR=1 - vipm activate \ - --serial-number "$VIPM_SERIAL_NUMBER" \ - --name "$VIPM_FULL_NAME" \ - --email "$VIPM_EMAIL" - vipm refresh + - name: Generate runner dependency lock + run: | + source setup-display.sh + /usr/local/natinst/LabVIEW-${LABVIEW_VERSION_YEAR}-64/labview --headless & - project_dir="$(mktemp -d)" - trap "rm -rf $project_dir" EXIT - cp /workspace/Tooling/deployment/runner_dependencies.toml "$project_dir/vipm.toml" - cd "$project_dir" - vipm lock --labview-version 2021 --labview-bitness 64 + project_dir="$(mktemp -d)" + cp Tooling/deployment/runner_dependencies.toml "$project_dir/vipm.toml" + cd "$project_dir" + vipm lock --labview-version "$LABVIEW_VERSION_YEAR" --labview-bitness 64 - mkdir -p /workspace/runner-dependency-lock-artifact - cp vipm.lock /workspace/runner-dependency-lock-artifact/runner_dependencies.lock - ' + mkdir -p "$GITHUB_WORKSPACE/runner-dependency-lock-artifact" + cp vipm.lock "$GITHUB_WORKSPACE/runner-dependency-lock-artifact/runner_dependencies.lock" - name: Upload generated lock if: always() From 5e3fdd9bee3050256c6908221e7b4040e8a20878 Mon Sep 17 00:00:00 2001 From: Amrutha G Date: Wed, 30 Sep 2026 11:29:59 +0530 Subject: [PATCH 3/4] Update lock bootstrap workflow --- .../bootstrap-runner-dependency-lock.yml | 70 ++++++++++--------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/.github/workflows/bootstrap-runner-dependency-lock.yml b/.github/workflows/bootstrap-runner-dependency-lock.yml index b4b88c11..9538ac0e 100644 --- a/.github/workflows/bootstrap-runner-dependency-lock.yml +++ b/.github/workflows/bootstrap-runner-dependency-lock.yml @@ -18,56 +18,62 @@ jobs: env: LABVIEW_VERSION_YEAR: "2026" + VIPM_SERIAL_NUMBER: ${{ secrets.VIPM_SERIAL_NUMBER }} + VIPM_FULL_NAME: ${{ secrets.VIPM_FULL_NAME }} + VIPM_EMAIL: ${{ secrets.VIPM_EMAIL }} steps: - name: Checkout code uses: actions/checkout@v4 - - name: Create display setup script + - name: Install VIPM run: | - cat > setup-display.sh << 'EOF' - TARGET_DISPLAY=:99 - export DISPLAY="$TARGET_DISPLAY" - if ! pgrep -x Xvfb > /dev/null; then - Xvfb "$TARGET_DISPLAY" -screen 0 1280x720x24 -ac +extension GLX +render -noreset \ - > /tmp/xvfb.log 2>&1 & + apt-get update + apt-get install -y wget ca-certificates xvfb + if ! command -v vipm >/dev/null 2>&1; then + wget -O /tmp/vipm.deb https://packages.jki.net/vipm/preview/vipm_latest_preview_amd64.deb + apt-get install -y /tmp/vipm.deb fi - # Without this marker file the LabVIEW Runtime Engine may not start properly. - mkdir -p /tmp/natinst && echo "1" > /tmp/natinst/LVContainer.txt - echo "$(pgrep -x Xvfb > /dev/null && echo "Xvfb running (DISPLAY=$TARGET_DISPLAY)" || echo "WARNING: Xvfb is required by vipm, but failed to start; DISPLAY=$DISPLAY may not work. Check /tmp/xvfb.log for details.")" - EOF - - name: Install VIPM + - name: Start display and activate VIPM run: | - wget -O /tmp/vipm.deb https://packages.jki.net/vipm/preview/vipm_latest_preview_amd64.deb - dpkg -i /tmp/vipm.deb - rm /tmp/vipm.deb + export DISPLAY=:99 + export VIPM_TIMEOUT=500 + Xvfb "$DISPLAY" -screen 0 1280x720x24 -ac +extension GLX +render -noreset >/tmp/xvfb.log 2>&1 & + # Without this marker file the LabVIEW Runtime Engine may not start properly. + mkdir -p /tmp/natinst && echo "1" > /tmp/natinst/LVContainer.txt + vipm --version + vipm activate \ + --serial-number "$VIPM_SERIAL_NUMBER" \ + --name "$VIPM_FULL_NAME" \ + --email "$VIPM_EMAIL" - - name: Activate VIPM + - name: Stage dependency manifest run: | - source setup-display.sh - vipm activate \ - --serial-number "${{ secrets.VIPM_SERIAL_NUMBER }}" \ - --name "${{ secrets.VIPM_FULL_NAME }}" \ - --email "${{ secrets.VIPM_EMAIL }}" + project_dir="$GITHUB_WORKSPACE/.vipm-lock-project" + mkdir -p "$project_dir" + cp Tooling/deployment/runner_dependencies.toml "$project_dir/vipm.toml" + echo "VIPM_PROJECT_DIR=$project_dir" >> "$GITHUB_ENV" - name: Refresh package sources run: | - source setup-display.sh - vipm refresh + export DISPLAY=:99 + cd "$VIPM_PROJECT_DIR" + # Clean runner has no repository cache; populate it for this + # project's LabVIEW target before lock resolution. + vipm refresh --labview-version "$LABVIEW_VERSION_YEAR" --labview-bitness 64 - name: Generate runner dependency lock run: | - source setup-display.sh - /usr/local/natinst/LabVIEW-${LABVIEW_VERSION_YEAR}-64/labview --headless & - - project_dir="$(mktemp -d)" - cp Tooling/deployment/runner_dependencies.toml "$project_dir/vipm.toml" - cd "$project_dir" - vipm lock --labview-version "$LABVIEW_VERSION_YEAR" --labview-bitness 64 + export DISPLAY=:99 + cd "$VIPM_PROJECT_DIR" + vipm lock - mkdir -p "$GITHUB_WORKSPACE/runner-dependency-lock-artifact" - cp vipm.lock "$GITHUB_WORKSPACE/runner-dependency-lock-artifact/runner_dependencies.lock" + - name: Collect generated lock + if: always() + run: | + mkdir -p runner-dependency-lock-artifact + cp "$VIPM_PROJECT_DIR/vipm.lock" runner-dependency-lock-artifact/runner_dependencies.lock - name: Upload generated lock if: always() From 9414bb5e0ef7a63383d9835ee51602d1365be6ed Mon Sep 17 00:00:00 2001 From: Amrutha G Date: Thu, 1 Oct 2026 11:04:27 +0530 Subject: [PATCH 4/4] Add automatic VIPM dependency update workflow and lock file --- .../workflows/automatic-update-dependency.yml | 27 ++++ .../bootstrap-runner-dependency-lock.yml | 85 ------------ Tooling/deployment/runner_dependencies.lock | 125 ++++++++++++++++++ Tooling/deployment/runner_dependencies.toml | 2 +- 4 files changed, 153 insertions(+), 86 deletions(-) create mode 100644 .github/workflows/automatic-update-dependency.yml delete mode 100644 .github/workflows/bootstrap-runner-dependency-lock.yml create mode 100644 Tooling/deployment/runner_dependencies.lock diff --git a/.github/workflows/automatic-update-dependency.yml b/.github/workflows/automatic-update-dependency.yml new file mode 100644 index 00000000..c9081002 --- /dev/null +++ b/.github/workflows/automatic-update-dependency.yml @@ -0,0 +1,27 @@ +name: Automatic update dependencies + +on: + schedule: + - cron: '0 9 * * 6' # Every Saturday at 09:00 UTC + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + update-dependencies: + uses: ni/open-source/.github/workflows/reusable-vipm-update.yml@actions + with: + working_directory: Tooling/deployment + manifest_filename: runner_dependencies.toml + lock_filename: runner_dependencies.lock + include_dev_dependencies: false + labview_version: "2021" + labview_bitness: "64" + base_branch: develop + pr_branch: automation/vipm-dependency-update + secrets: + VIPM_SERIAL_NUMBER: ${{ secrets.VIPM_SERIAL_NUMBER }} + VIPM_FULL_NAME: ${{ secrets.VIPM_FULL_NAME }} + VIPM_EMAIL: ${{ secrets.VIPM_EMAIL }} diff --git a/.github/workflows/bootstrap-runner-dependency-lock.yml b/.github/workflows/bootstrap-runner-dependency-lock.yml deleted file mode 100644 index 9538ac0e..00000000 --- a/.github/workflows/bootstrap-runner-dependency-lock.yml +++ /dev/null @@ -1,85 +0,0 @@ -name: Bootstrap Runner Dependency Lock - -on: - workflow_dispatch: - pull_request: - types: - - opened - - synchronize - - reopened - -jobs: - generate-lock: - name: Generate runner dependency lock - if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }} - runs-on: ubuntu-latest - container: - image: nationalinstruments/labview:2026q1patch2-linux - - env: - LABVIEW_VERSION_YEAR: "2026" - VIPM_SERIAL_NUMBER: ${{ secrets.VIPM_SERIAL_NUMBER }} - VIPM_FULL_NAME: ${{ secrets.VIPM_FULL_NAME }} - VIPM_EMAIL: ${{ secrets.VIPM_EMAIL }} - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Install VIPM - run: | - apt-get update - apt-get install -y wget ca-certificates xvfb - if ! command -v vipm >/dev/null 2>&1; then - wget -O /tmp/vipm.deb https://packages.jki.net/vipm/preview/vipm_latest_preview_amd64.deb - apt-get install -y /tmp/vipm.deb - fi - - - name: Start display and activate VIPM - run: | - export DISPLAY=:99 - export VIPM_TIMEOUT=500 - Xvfb "$DISPLAY" -screen 0 1280x720x24 -ac +extension GLX +render -noreset >/tmp/xvfb.log 2>&1 & - # Without this marker file the LabVIEW Runtime Engine may not start properly. - mkdir -p /tmp/natinst && echo "1" > /tmp/natinst/LVContainer.txt - vipm --version - vipm activate \ - --serial-number "$VIPM_SERIAL_NUMBER" \ - --name "$VIPM_FULL_NAME" \ - --email "$VIPM_EMAIL" - - - name: Stage dependency manifest - run: | - project_dir="$GITHUB_WORKSPACE/.vipm-lock-project" - mkdir -p "$project_dir" - cp Tooling/deployment/runner_dependencies.toml "$project_dir/vipm.toml" - echo "VIPM_PROJECT_DIR=$project_dir" >> "$GITHUB_ENV" - - - name: Refresh package sources - run: | - export DISPLAY=:99 - cd "$VIPM_PROJECT_DIR" - # Clean runner has no repository cache; populate it for this - # project's LabVIEW target before lock resolution. - vipm refresh --labview-version "$LABVIEW_VERSION_YEAR" --labview-bitness 64 - - - name: Generate runner dependency lock - run: | - export DISPLAY=:99 - cd "$VIPM_PROJECT_DIR" - vipm lock - - - name: Collect generated lock - if: always() - run: | - mkdir -p runner-dependency-lock-artifact - cp "$VIPM_PROJECT_DIR/vipm.lock" runner-dependency-lock-artifact/runner_dependencies.lock - - - name: Upload generated lock - if: always() - uses: actions/upload-artifact@v4 - with: - name: runner-dependency-lock - path: runner-dependency-lock-artifact/runner_dependencies.lock - if-no-files-found: error - retention-days: 7 \ No newline at end of file diff --git a/Tooling/deployment/runner_dependencies.lock b/Tooling/deployment/runner_dependencies.lock new file mode 100644 index 00000000..790731fd --- /dev/null +++ b/Tooling/deployment/runner_dependencies.lock @@ -0,0 +1,125 @@ +# This file is automatically generated by vipm. +# It is not intended for manual editing. + +version = 2 +revision = 0 +updated-at = "2026-09-30T06:03:47.480224048Z" +requires-labview = "2021" + +[[vipm.repo]] +name = "NI LabVIEW Tools Network" +uri = "http://download.ni.com/evaluation/labview/lvtn/vipm" + +[[vipm.repo]] +name = "VIPM Community" +uri = "http://www.jkisoft.com/packages" + +[[package]] +name = "jdp_science_jsontext" +version = "1.9.0.124" +manager = "vipm" +dependencies = ["jdp_science_lib_common_utilities"] +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "NI LabVIEW Tools Network" +checksum = "md5:87ea40ee60bbb5e1c2b16f67b3210e6b" + +[[package]] +name = "jdp_science_lib_common_utilities" +version = "1.4.1.18" +manager = "vipm" +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "NI LabVIEW Tools Network" +checksum = "md5:9b22f7af77447f46e4777298757d850e" + +[[package]] +name = "jki_lib_caraya" +version = "1.4.3.147" +manager = "vipm" +dependencies = [ + "jki_lib_state_machine", + "jki_rsc_toolkits_palette", +] +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "VIPM Community" +checksum = "md5:0c20279ab1c809e6ee64eec107347a64" + +[[package]] +name = "jki_lib_state_machine" +version = "2024.0.3.23" +manager = "vipm" +dependencies = ["jki_rsc_toolkits_palette"] +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "VIPM Community" +checksum = "md5:58d05fd50ecd54c4f1bfc05d47064f61" + +[[package]] +name = "jki_lib_vipm_api" +version = "2020.0.3.80" +manager = "vipm" +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "VIPM Community" +checksum = "md5:cb505625a4ff64539096f041ad32f687" + +[[package]] +name = "jki_rsc_toolkits_palette" +version = "1.1-1" +manager = "vipm" +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "VIPM Community" +checksum = "md5:d8e12776ee5532544b44cc7ab43045f8" + +[[package]] +name = "sas_workshops_lib_lvbuildspec_for_g_cli" +version = "1.2.0.99" +manager = "vipm" +dependencies = ["wiresmith_technology_lib_g_cli"] +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "VIPM Community" +checksum = "md5:c1bff92101bf8e8e9f6f07ca1a773a58" + +[[package]] +name = "sas_workshops_lib_vipb_builder_for_g_cli" +version = "1.1.5.42" +manager = "vipm" +dependencies = [ + "jki_lib_vipm_api", + "wiresmith_technology_lib_g_cli", +] +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "VIPM Community" +checksum = "md5:3521e2499272c04476a5968a13fcf297" + +[[package]] +name = "wiresmith_technology_lib_g_cli" +version = "3.0.1.98" +manager = "vipm" +group = "dev" +resolution-source = "repo" + +[[package.source]] +repo = "VIPM Community" +checksum = "md5:afd65a73b9c5719d91830db7a021d111" diff --git a/Tooling/deployment/runner_dependencies.toml b/Tooling/deployment/runner_dependencies.toml index 6afa224f..03072b3c 100644 --- a/Tooling/deployment/runner_dependencies.toml +++ b/Tooling/deployment/runner_dependencies.toml @@ -3,7 +3,7 @@ name = "actor-framework-ci-runner-dependencies" version = "1.0.0" labview-version = "2021" -[dev-dependencies] +[dependencies] jdp_science_jsontext = "1.9.0.124" jdp_science_lib_common_utilities = "1.4.1.18" jki_lib_caraya = "1.4.3.147"