This document is designed to help maintainers, contributors, and engineers automate the build and packaging process for LabVIEW-based projects—particularly the Icon Editor. By following this workflow, you can:
-build42)..vip file and upload it as an artifact through GitHub Actions. If you want to publish a release, run a separate workflow to create it.Whether you’re merging a pull request, pushing hotfixes directly, or working on release branches with RC tags, this workflow unifies your packaging pipeline under a single YAML definition. Release creation must be handled separately.
The Build VI Package workflow provides a consistent, automated build process for LabVIEW-based projects like the Icon Editor. Instead of manually labeling versions, packaging .vip artifacts, and drafting releases, this workflow:
major, minor, patch) to decide version increments..vip file using a PowerShell script.It eliminates confusion around versioning, keeps everything in one pipeline, and ensures every commit or merge triggers a reproducible build.
.vip files, and drafting GitHub releases by hand. This was prone to mistakes..vip, increments the version, and uploads the resulting artifact. Release publishing can be managed with another workflow.major, minor, or patch labels to the PR, no custom scripts needed..NET frameworks needed for your build scripts should suffice.pwsh)..vip files.build-lvlibp and build-vi-package GitHub actions to compile libraries and create the .vip package.gh CLI is required.The build-vi-package directory defines a composite action. It does not listen for events on its own; instead, the CI workflow in ci-composite.yml invokes it.
That workflow runs on push, pull_request, and workflow_dispatch events. The issue-status and changes jobs run on GitHub-hosted ubuntu-latest. Subsequent jobs that require LabVIEW—apply-deps, version, test, build-ppl, and build-vi-package—execute on a self-hosted Windows runner (self-hosted-windows-lv-ie). Only Windows-specific jobs (e.g., test, build-ppl, build-vi-package) require the self-hosted runner. Linux support is considered a future or custom expansion: you would need to extend the matrix and provide a corresponding runner label (for example, self-hosted-linux-lv). Pushes are limited to main, develop, release-alpha/*, release-beta/*, release-rc/*, feature/*, hotfix/*, and issue-* branches, and pull requests must target one of those branches. However, build-vi-package executes only if the issue-status job allows the pipeline to continue: the source branch name must contain issue-<number> (for example, issue-123 or feature/issue-123) and the linked issue’s Status must be In Progress. For pull requests, the issue-status gate evaluates the PR’s head branch before running the version and build-ppl jobs, which depend on this gate.
ci-composite.yml calls this action and provides all required inputs automatically. When invoking
build-vi-package from another workflow, supply the following parameters
(see action.yml for details):
| Input | Description |
|---|---|
supported_bitness |
32 or 64; selects the VI Package bitness. |
labview_version |
LabVIEW 2021 (21.0). |
labview_minor_revision |
LabVIEW minor revision (defaults to 0). |
major |
Major version component. |
minor |
Minor version component. |
patch |
Patch version component. |
build |
Build number. |
commit |
Commit identifier. |
release_notes_file |
Path to release notes file. |
display_information_json |
DisplayInformation JSON string. |
The action automatically uses the first .vipb file found in .github/actions/build-vi-package.
The major, minor, and patch inputs are derived from pull-request labels (major,
minor, patch) by the version job (which runs the compute-version action) in
ci-composite.yml. If a pull request lacks these labels, the compute-version action
defaults to bumping the patch version. For direct pushes without labels, the version
components remain unchanged and only the build number increases.
.github/workflows/ci-composite.yml) into your fork.ni/labview-icon-editor) if your fork is named differently.
3. Self-Hosted Runner: Confirm your runner uses the self-hosted-windows-lv-ie label (or self-hosted-linux-lv for Linux jobs) or update runs-on to match your runner’s labels..vip is uploaded as an ephemeral artifact for that run.actions/checkout@v4 with fetch-depth: 0 so we get the entire commit history (required for the commit-based build number).major, minor, patch, or defaults to none.none, no version increment beyond the build number.git rev-list --count HEAD, storing the integer in new_build_number.-build37.release-alpha/*, release-beta/*, or release-rc/*, appends -alpha.<commitCount>, -beta.<commitCount>, or -rc.<commitCount> respectively. Here <N> equals the commit count, matching compute-version.-build<BUILD_NUMBER> last, e.g. v1.2.3-rc.37-build37. Because both values use the commit count, the pre-release number and build number are identical.build-lvlibp action to compile the packed libraries.major, minor, patch, build),Tooling/deployment/release_notes.md.build-vi-package action to generate the final .vip file with those values embedded..vip as an ephemeral artifact for the current Actions run.git describe --tags --abbrev=0 or a custom pattern v*.*.*-build* might be used to find the last version tag.v0.0.0-build<commitCount> (plus any suffix if major/minor/patch was used).release-alpha/*, release-beta/*, release-rc/* branches → Add -alpha.<commitCount>, -beta.<commitCount>, or -rc.<commitCount> suffixes to indicate pre-release. The <N> value equals the commit count and therefore matches the build suffix.main typically yields a final version with no pre-release suffix.GITHUB_TOKEN are available only in limited capacity on PRs from external repos.actions/checkout@v4 or actions/github-script@v7. Keep an eye on updates or deprecations. Update to a newer checkout version when the action itself is revised. Some internal actions—such as compute-version—may still pin different releases for compatibility, so mixing versions is expected.build-lvlibp and build-vi-package actions up to date.runs-on: self-hosted-windows-lv-ie (and self-hosted-linux-lv where applicable). Confirm your runner has the required label..vip.release-*/* logic with your own branch pattern (e.g., release-gamma/* => -gamma.<N>)..github/workflows/ci-composite.yml file.develop.major or minor..vip artifact is uploaded; any tagging or release must be handled separately.minor:
v1.2.3-build45v1.3.0-build46release-rc/*, might become v1.3.0-rc.46-build46 (release-alpha/* and release-beta/* yield -alpha.<commitCount> and -beta.<commitCount>).develop without opening a PR.v1.2.3-build46 to v1.2.3-build47.release-rc/1.2.-rc.<commitCount> each time you commit to that pre-release branch, e.g. v1.2.0-rc.50-build50. Branches named release-alpha/1.2 or release-beta/1.2 would similarly append -alpha.<commitCount> or -beta.<commitCount>; these patterns correspond to the release-alpha/*, release-beta/*, and release-rc/* rules in ci-composite.yml.release-rc/1.2 back to main finalizes v1.2.0-build51.none for version bump..vip artifact. Creating tags or releases requires additional steps..github/workflows/ci-composite.yml to your fork..vip file is built and uploaded as an artifact for your run.patch) into develop..vip artifact is available. If you run a separate release workflow, confirm that the release was created..vip. If they fail, the script can exit with a non-zero code, stopping the workflow run.build-vi-package action completed successfully and produced the artifact.%UserProfile%\.runner\ or wherever your runner is installed.Q: How do I force a “patch” bump if I push directly to develop?
A: Use a pull request with the patch label. Direct pushes without PR labels always use the previous version numbers.
Q: How do I override the build number?
A: By default, we rely on git rev-list --count HEAD. You can change it by passing a custom environment variable or adjusting the version logic in your workflow.
Q: Does it support alpha/beta channels out of the box?
A: Yes. Branches release-alpha/*, release-beta/*, and release-rc/* automatically append -alpha.<commitCount>, -beta.<commitCount>, or -rc.<commitCount> during the “Compute version string” step, so the pre-release number matches the build number.
Q: What about manual triggers?
A: If workflow_dispatch is enabled, you can run it from the Actions tab, typically defaulting to the same logic (none for bump).
Q: Where do I see ephemeral artifacts?
A: In the Actions run logs. Look for the “Artifacts” section. If you later create a release and attach the .vip, it becomes permanent under “Assets” on the Release page.
By properly setting up environment variables, referencing your LabVIEW environment on a self-hosted runner, and using label-based version increments plus a commit-based build number, this GitHub Action automates your .vip build and artifact upload process. Maintainers can extend the pipeline with tagging or release steps if desired. Follow the troubleshooting steps if anything goes awry, and enjoy streamlined LabVIEW CI/CD!