Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
a86a545
Update README title for BYU team branch
amur-bashirov Jan 21, 2026
c69f6ff
created React Demo
amur-bashirov Jan 21, 2026
e41f690
Amur's React + Vite default app
amur-bashirov Jan 21, 2026
125eae9
Rename React app folder
amur-bashirov Jan 21, 2026
6872ffb
Created folders to begin developing
Samuelsotogit Jan 21, 2026
d7c15cb
Merge branch 'BYU-Development' of https://github.com/Samuelsotogit/sy…
Samuelsotogit Jan 21, 2026
cd99b03
put react empty app into web-apps folder
amur-bashirov Jan 21, 2026
dd5b89e
Update Nimble package
reouct Jan 22, 2026
0022308
Remove default React buttons
reouct Jan 22, 2026
f62b9bc
Added NI icon to the page
amur-bashirov Jan 22, 2026
684e857
added buttons colors
amur-bashirov Jan 22, 2026
91d5c64
Co-authored-by: Bowen Liu <reouct@users.noreply.github.com>
amur-bashirov Jan 22, 2026
0a24153
new path and css
amur-bashirov Jan 23, 2026
85d83b1
put a placeholder for config.js
amur-bashirov Jan 23, 2026
b1de94a
changed it to the typescript
amur-bashirov Jan 23, 2026
df1b8ce
put a placeholder for config
amur-bashirov Jan 23, 2026
71bb8d2
unable to use secrets not in pipline, reversed the proccess back
amur-bashirov Jan 23, 2026
fa85069
pit config.ts into gitignore
amur-bashirov Jan 23, 2026
51d0af9
tried to put it one more time
amur-bashirov Jan 23, 2026
5a10fcc
changed config back
amur-bashirov Jan 23, 2026
dff043c
Stop tracking config.ts
amur-bashirov Jan 23, 2026
9bc4478
push to delete config.ts
amur-bashirov Jan 23, 2026
6b4de7c
deleted dem_config
amur-bashirov Jan 23, 2026
9626c3b
finished creating demo config
amur-bashirov Jan 23, 2026
07aca10
finished config file and demo config file
amur-bashirov Jan 23, 2026
3fc1884
defined div for api call
amur-bashirov Jan 24, 2026
acef4c6
finished css for button and api
amur-bashirov Jan 24, 2026
3084d50
defined first div and title for the example css
amur-bashirov Jan 25, 2026
a2c4e9d
Set Up README.md on top and lower levels within the repo
Samuelsotogit Jan 26, 2026
5026d57
Merge branch 'BYU-Development' of https://github.com/Samuelsotogit/sy…
Samuelsotogit Jan 26, 2026
a2b111f
sussesfuly called api call
amur-bashirov Jan 26, 2026
805acec
Update README on how to run the app locally.
reouct Jan 26, 2026
d4c1875
fixed most of the issues with main description for now
amur-bashirov Jan 26, 2026
e5da9fa
Merge branch 'Bowen-Amur-Design' of https://github.com/Samuelsotogit/…
amur-bashirov Jan 26, 2026
4edeaad
CSS cleanup.
reouct Jan 26, 2026
96316c1
Update on displaying the response on the screen
reouct Jan 26, 2026
0824d32
Starting Blazor Work
Hecktomb200 Jan 30, 2026
b01f438
empty new blazor app
amur-bashirov Jan 30, 2026
00f5936
added html
amur-bashirov Jan 30, 2026
0e96f9b
renamed service to serviceProxy)
rockyRaccoon13 Feb 2, 2026
ef0e56f
dotnet changes
Samuelsotogit Feb 2, 2026
6027eee
added gitignore
amur-bashirov Feb 2, 2026
4d0c12f
Merge branch 'BYU-Development' into Bowen-Amur-Logan-Design
amur-bashirov Feb 2, 2026
ed6f6f1
ignore config (sensitive data) and node_modules (bloat)
rockyRaccoon13 Feb 2, 2026
cd37f3d
ignore node_modules, dist/, *.nipkg
rockyRaccoon13 Feb 2, 2026
614574b
fix(build) vite build now uses relative paths
rockyRaccoon13 Feb 2, 2026
29d2a33
fixed proxy setup. Add vite env files for dev and prod
rockyRaccoon13 Feb 2, 2026
7506bfa
update(README). proxy config and SL-CLI deployment instructions
rockyRaccoon13 Feb 2, 2026
c1bd8e7
Merge branch 'BYU-Development' into dev/benson
rockyRaccoon13 Feb 2, 2026
ab058fc
temp fix(proxyService) proxy works for specific endpoint and method
rockyRaccoon13 Feb 2, 2026
3ecb790
added notes on how dev/prod envs work
rockyRaccoon13 Feb 2, 2026
fe125a0
made service work for all methods and upstream paths
rockyRaccoon13 Feb 4, 2026
1e2a81e
Merge branch 'BYU-Development' into dev/benson
rockyRaccoon13 Feb 4, 2026
af1b8f5
Merge branch 'ni:main' into BYU-Development
rockyRaccoon13 Feb 4, 2026
b580e0c
added test
rockyRaccoon13 Feb 4, 2026
73453e1
updated css
amur-bashirov Feb 4, 2026
53eab0a
changed the structure of the design
amur-bashirov Feb 6, 2026
3da2929
imported font
amur-bashirov Feb 6, 2026
db4488d
Added Initial Blazor APP
Samuelsotogit Feb 6, 2026
a0b2bb9
Merge branch 'BYU-Development' of https://github.com/Samuelsotogit/sy…
Samuelsotogit Feb 6, 2026
4b584d3
Changed file names
Samuelsotogit Feb 8, 2026
af084c0
added dependencies via npm
Samuelsotogit Feb 8, 2026
610c690
Installed NimbleBlazor dependencies, created API component page with …
Samuelsotogit Feb 8, 2026
417f71f
Add Nimble components support to Blazor app
Samuelsotogit Feb 8, 2026
b0ba768
Merge branch 'blazor-API-call-feature' into BYU-Development
Samuelsotogit Feb 8, 2026
05adc20
fixed buttons and description css
amur-bashirov Feb 9, 2026
36bebdd
init(webapp-deployment ci)
rockyRaccoon13 Feb 9, 2026
9ab6fc5
fixed webapp-deploy.yml to run action on change to yml
rockyRaccoon13 Feb 9, 2026
681689e
Add interactive API call example page
Samuelsotogit Feb 9, 2026
80d3e06
figured out css for links
amur-bashirov Feb 9, 2026
82ee280
fix(webapp-deploy.yml) - actions versions, app paths, secrets keys
rockyRaccoon13 Feb 9, 2026
30e500f
fix(webapp workflow) - add slcli to github path
rockyRaccoon13 Feb 9, 2026
eee214e
fix(webapp workflow) - update login to match new slcli cmd
rockyRaccoon13 Feb 9, 2026
94c52c2
change(webapp-deploy) add Prod prefix to published name
rockyRaccoon13 Feb 9, 2026
10964a7
change
rockyRaccoon13 Feb 9, 2026
fce4987
refactor(webb-app deploy) 1 job (instead of 2)
rockyRaccoon13 Feb 9, 2026
c6be905
Merge branch 'ni:main' into BYU-Development
rockyRaccoon13 Feb 9, 2026
cce3084
Merge branch 'ni:main' into main
rockyRaccoon13 Feb 9, 2026
4a2a712
added test
rockyRaccoon13 Feb 4, 2026
1280d33
init(webapp-deployment ci)
rockyRaccoon13 Feb 9, 2026
d828e1a
fixed webapp-deploy.yml to run action on change to yml
rockyRaccoon13 Feb 9, 2026
436c0be
fix(webapp-deploy.yml) - actions versions, app paths, secrets keys
rockyRaccoon13 Feb 9, 2026
140d829
fix(webapp workflow) - add slcli to github path
rockyRaccoon13 Feb 9, 2026
1dd7b16
fix(webapp workflow) - update login to match new slcli cmd
rockyRaccoon13 Feb 9, 2026
0230da8
change(webapp-deploy) add Prod prefix to published name
rockyRaccoon13 Feb 9, 2026
3334e6c
change
rockyRaccoon13 Feb 9, 2026
fce8ba1
refactor(webb-app deploy) 1 job (instead of 2)
rockyRaccoon13 Feb 9, 2026
df0d79d
delete(unused)
rockyRaccoon13 Feb 10, 2026
2de2578
setup esLint using NI rules (plus, downgraded globals to make lintin…
rockyRaccoon13 Feb 10, 2026
9f3ed3b
Merge branch 'BYU-Development' into dev/benson
rockyRaccoon13 Feb 10, 2026
88fe2f5
mod(vite.config.ts) eslint ignore(no-default-export, no-extra-dep)
rockyRaccoon13 Feb 10, 2026
089eb71
add lint to webapp-deploy workflow
rockyRaccoon13 Feb 10, 2026
02e7519
dotnet changes
Samuelsotogit Feb 2, 2026
b1201fd
Added Initial Blazor APP
Samuelsotogit Feb 6, 2026
adf8bc4
Changed file names
Samuelsotogit Feb 8, 2026
883e029
Installed NimbleBlazor dependencies, created API component page with …
Samuelsotogit Feb 8, 2026
3a36716
Add Nimble components support to Blazor app
Samuelsotogit Feb 8, 2026
892f6c8
added test
rockyRaccoon13 Feb 4, 2026
858487d
init(webapp-deployment ci)
rockyRaccoon13 Feb 9, 2026
e4d1eb6
delete(unused)
rockyRaccoon13 Feb 10, 2026
0625fa0
setup esLint using NI rules (plus, downgraded globals to make lintin…
rockyRaccoon13 Feb 10, 2026
2b6cead
mod(vite.config.ts) eslint ignore(no-default-export, no-extra-dep)
rockyRaccoon13 Feb 10, 2026
c4ae11d
add lint to webapp-deploy workflow
rockyRaccoon13 Feb 10, 2026
71b963b
init(deployDev.sh) to automate adding webapp to SL website
rockyRaccoon13 Feb 10, 2026
da59ef1
Merge branch 'BYU-Development'
rockyRaccoon13 Feb 10, 2026
f1c33a7
addTo(webapp deployment workflow) run on angular folders
rockyRaccoon13 Feb 10, 2026
25eedc8
Merge branch 'BYU-Development'
rockyRaccoon13 Feb 10, 2026
5d00908
fix(env variable for apps dir react)
rockyRaccoon13 Feb 10, 2026
386de8e
Merge branch 'BYU-Development'
rockyRaccoon13 Feb 10, 2026
cb2fae3
changed the colors and some ui
amur-bashirov Feb 10, 2026
5b1f6f0
API call now functioning for local development
Samuelsotogit Feb 11, 2026
3f41680
fix(workflow) delete incorrect white space
rockyRaccoon13 Feb 11, 2026
569b283
Merge branch 'blazor-API-call-feature' into BYU-Development
Samuelsotogit Feb 11, 2026
ea2bfcf
saved fonts offline
amur-bashirov Feb 11, 2026
4471f7b
Merge branch 'main' of https://github.com/Samuelsotogit/systemlink-en…
reouct Feb 11, 2026
bccf25c
changed all the links to open tabs
amur-bashirov Feb 11, 2026
c72cdcd
Merge branch 'React'
amur-bashirov Feb 11, 2026
0afb87a
fix(workflow) fix typo in angular env variable
rockyRaccoon13 Feb 11, 2026
6e5888b
Merge branch 'devOps/CI_CD'
rockyRaccoon13 Feb 11, 2026
8087555
mv(serviceProxy) to Dev Tools/ApiServiceProxy
rockyRaccoon13 Feb 11, 2026
3aa315b
rename(amur-react-vite-app) to ApiKeyAuthApp
rockyRaccoon13 Feb 11, 2026
195361b
mv web_apps/** into examples/
rockyRaccoon13 Feb 11, 2026
9c9263e
update(workflow) to reflect path changes
rockyRaccoon13 Feb 11, 2026
c4389ee
implemented Nimble fonts
amur-bashirov Feb 11, 2026
bdc82b0
implemented Nimble fonts
amur-bashirov Feb 11, 2026
e203c5c
Merge branch 'main' into React -- restructured code
rockyRaccoon13 Feb 11, 2026
4e73c76
deleted Blazor apps
amur-bashirov Feb 11, 2026
c46a04e
deleted react workflow
amur-bashirov Feb 11, 2026
2b4e599
implemented Nimble fonts
amur-bashirov Feb 11, 2026
d65631e
edited Instructions. for running proxy server
rockyRaccoon13 Feb 11, 2026
694df61
edited Instructions. for running proxy server
rockyRaccoon13 Feb 11, 2026
1be8f3c
add webapp_deploy
rockyRaccoon13 Feb 11, 2026
032ae88
fix (workflow) app dirs
rockyRaccoon13 Feb 12, 2026
8fb5d11
fixed workflow target path
rockyRaccoon13 Feb 12, 2026
6006bac
rm(junk Readme_files folder)
rockyRaccoon13 Feb 13, 2026
f737b36
added green box border
amur-bashirov Feb 13, 2026
057cea9
edit(README) edit web_app examples
rockyRaccoon13 Feb 13, 2026
f8a6374
added green box border
amur-bashirov Feb 13, 2026
8090b68
Merge branch 'main' into React
rockyRaccoon13 Feb 13, 2026
9dc7710
added padding
amur-bashirov Feb 13, 2026
af2732f
changed the titles for the links
amur-bashirov Feb 13, 2026
c22cbb3
changed all the divs inside the header to make the tabs as links them…
amur-bashirov Feb 13, 2026
3611ec8
renamed title component to make css easier to work with
amur-bashirov Feb 13, 2026
e6ca6f7
polished design for links
amur-bashirov Feb 13, 2026
f62fceb
added logos folder
amur-bashirov Feb 13, 2026
adc2147
clean up(bad files)
rockyRaccoon13 Feb 13, 2026
bdfdfa2
remove react logo
rockyRaccoon13 Feb 13, 2026
44a7753
delete font files
rockyRaccoon13 Feb 13, 2026
fd194aa
Merge remote-tracking branch 'origin/NewReact' into React
rockyRaccoon13 Feb 18, 2026
2550523
Update README.md edit letter casing
rockyRaccoon13 Feb 19, 2026
500e5d7
Update .gitignore -- removed .net ignores
rockyRaccoon13 Feb 20, 2026
26ec764
change web app folder names to match casing
rockyRaccoon13 Feb 20, 2026
7528064
move .gitignore to parent folder (1 per project)
rockyRaccoon13 Feb 20, 2026
d65a7dc
Update .github/workflows/webapp-deploy.yml
rockyRaccoon13 Feb 20, 2026
fedfca4
fixed eslint config (app ts/tsx, js, and vite errors)
rockyRaccoon13 Feb 20, 2026
6295d5d
fix basic linting errors
rockyRaccoon13 Feb 20, 2026
ee663e5
changed term website to env to refer to SL UI env
rockyRaccoon13 Feb 20, 2026
31cfc8d
change package.json meta
rockyRaccoon13 Feb 20, 2026
60dd345
updated readme for service proxy
rockyRaccoon13 Feb 20, 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
104 changes: 104 additions & 0 deletions .github/workflows/webapp-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
name: Deploy React WebApps

on:
push:
branches:
Copy link
Collaborator

Choose a reason for hiding this comment

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

We should think through which steps of the pipeline should run on which branches. We can use the Nimble workflow for inspiration. The strategy there is:

  1. run the workflow against all branches for both branch pushes and PRs
  2. run the validation steps like build/lint/test on all runs
  3. only run the publish steps on pushes to main in this repo (not in forks). You can see this in the final publish step

Unless you have reasons not to, I'd vote for similar philosophy here, which would involve changing this to run on all branches and changing the SL Login and Deploy steps to run only in main. I think it's ok for the pack and GitHub artifact steps to run on all branches; that could enable a dev workflow where you push changes to github to get your app built and then manually download the nipkg artifact from the build result and manually upload it to your local SystemLink.

- main
- master
- devOps/CI_CD
paths:
- "examples/web_apps/Framework_Examples/**"
- ".github/workflows/webapp_deploy.yml"
pull_request:
branches:
- main
- master
paths:
- "examples/web_apps/Framework_Examples/**"
- ".github/workflows/deploy.yml"

jobs:
build-package-deploy:
runs-on: ubuntu-latest
strategy:
matrix: # Add frameworks and Folder names here
include:
- framework: React
app-folder: ApiKeyAuthApp

# - framework: Angular
# app-folder: my-angular-app-1 # example entry

env:
NODE_VERSION: "24.x.x"
REACT_APPS_DIR: "examples/Web Applications/Framework Examples/React"
ANGULAR_APPS_DIR: "examples/Web Applications/Framework Examples/Angular"

steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}

- name: Set App Directory
run: |
if [ "${{ matrix.framework }}" == "React" ]; then
echo "APP_DIR=${{ env.REACT_APPS_DIR }}/${{ matrix.app-folder }}" >> $GITHUB_ENV
else
echo "APP_DIR=${{ env.ANGULAR_APPS_DIR }}/${{ matrix.app-folder }}" >> $GITHUB_ENV
fi

- name: Install dependencies
working-directory: ${{ env.APP_DIR }}
run: npm ci

- name: Lint
working-directory: ${{ env.APP_DIR }}
run: npm run lint

- name: Build
working-directory: ${{ env.APP_DIR }}
run: npm run build

- name: Setup Homebrew + Install slcli
Copy link
Collaborator

Choose a reason for hiding this comment

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

I'm not super familiar with the matrix feature of GitHub actions, but will this end up installing the slcli multiple times? Do the matrix jobs run on the same agent? If so then we might save some time by moving this install step to happen before the matrix so it only happens once.

Just a suggestion, if my understanding is incorrect and that doesn't work then feel free to reject.

run: |
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
brew tap ni-kismet/homebrew-ni
brew install slcli
echo "/home/linuxbrew/.linuxbrew/bin" >> $GITHUB_PATH

- name: Package into .nipkg
working-directory: ${{ env.APP_DIR }}
run: |
WEBAPP_NAME=$(basename "$PWD")
slcli webapp pack dist/ --output "${WEBAPP_NAME}.nipkg"
echo "WEBAPP_NAME=${WEBAPP_NAME}" >> $GITHUB_ENV

- name: Upload .nipkg artifact to gitHub
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.app-folder }}.nipkg
path: ${{env.REACT_APPS_DIR}}/${{matrix.app-folder}}/${{env.WEBAPP_NAME}}.nipkg

- name: Login to SystemLink
run: |
slcli login --profile ghActions --url "${{ secrets.SL_API_URL }}" --api-key "${{ secrets.SL_API_KEY }}" --web-url "${{ secrets.SL_WEBSITE_URL }}" --workspace "${{secrets.SL_WORKSPACE}}"

- name: Deploy (publish new/update) webapp (nipkg) to NI internal SystemLink test tier
working-directory: ${{ env.APP_DIR }}
run: |
pkg=${{env.WEBAPP_NAME}}.nipkg
WEBAPP_NAME="$(basename "$pkg" .nipkg)_PROD"
echo "**Deploying "$pkg" "$WEBAPP_NAME"**"
WEBAPP_ID=$(slcli webapp list --workspace "${{ secrets.SL_WORKSPACE }}" --filter "$WEBAPP_NAME" --format json | jq -r '.[0].id // empty')
if [[ -z "$WEBAPP_ID" ]]; then
echo " *Webapp does not exist -- publishing new"
slcli webapp publish "$pkg" --name "$WEBAPP_NAME" --workspace "${{ secrets.SL_WORKSPACE }}"
else
echo " *Webapp exists -- updating"
slcli webapp publish "$pkg" --id "$WEBAPP_ID"
fi
echo "**Deployed "$WEBAPP_NAME"**"
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,18 @@ and extend SystemLink Enterprise for your organization's needs.
- Create work item templates for standardization
- Define custom workflows with specialized states and actions

### Web App Examples

- **[Framework Examples](examples/web_apps/Framework_Examples/)**
- Create your own custom web applications using SystemLink APIs
- Host your custom web apps in your SystemLink environment to add custom UIs

- **[Dev Tools](examples/web_apps/Dev%20Tools/)**
- Includes a proxy server that can be used to call SystemLinks APIs from
outside of your SystemLink website
- The proxy server that can be used to develop web apps locally, while later
hosting your applications in SystemLink

## Getting Started

### Prerequisites
Expand Down Expand Up @@ -114,6 +126,10 @@ tailored to that specific example.
- Customize the SystemLink user interface
- Standardize test plan creation
- Implement custom workflows for your processes
- **Web App Examples** - When you need to:
- Call SystemLink APIs from a web application
- Host your web app in your SystemLink environment
- Extend SystemLink's environment to meet your needs

## Documentation

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
proxyConfig.js
node_modules/
43 changes: 43 additions & 0 deletions examples/Web Applications/Dev Tools/ApiServiceProxy/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# API Service Proxy

The API Service Proxy is used to **locally** run web applications that call
SystemLink APIs.

## Purpose -- Local development

The API Service Proxy is used to forward requests to a SystemLink API server
(e.g. https://demo-api.lifecyclesolutions.ni.com). The forward proxy is
necessary because the API server does not allow cross origin sharing (no CORS).

The service proxy should be used when testing a web application in a local
environment. An api key is required to authorize requests made to a SystemLink
API server.

### Do not make calls through the proxy in production

Web applications that are hosted in a SystemLink environment should route
requests to the environment's domain (i.e.
https://demo.lifecyclesolutions.ni.com).

The endpoints in the SystemLink deployment environment are the same as the
SystemLink API endpoints, but authorization is done via a cookie which the
browser will automatically send with the request.

## Setup

1. Install dependencies:

```bash
npm ci
```

2. Create a `proxyConfig.js` from `proxyConfig.example.js` and add your
SystemLink API URL and API key

3. Start the backend server:

```bash
node index.js
```

4. Server will be running on `localhost:4000`
44 changes: 44 additions & 0 deletions examples/Web Applications/Dev Tools/ApiServiceProxy/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import express from "express";

import cors from "cors";

import { apiKey, apiServerUrl } from "./proxyConfig.js";
const app = express();
const PORT = 4000;

// Middleware
app.use(cors());
app.use(express.json());

// Simple proxy endpoint

app.all("/apiProxy/*splat", async (req, res) => {
const forwardPath = req.originalUrl.replace(/^\/apiProxy/, "");
const forwardFullUrl = `${apiServerUrl}${forwardPath}`;

const forwardReq = {
method: req.method,
headers: {
"x-ni-api-key": apiKey,
},
body: req.body,
};

try {
const upstreamResponse = await fetch(forwardFullUrl, forwardReq);

if (!upstreamResponse.ok) {
return res.status(response.status).send({});
}

const data = await upstreamResponse.json();
res.json(data);
} catch (err) {
console.error(err);
res.status(500).send({ error: "Proxy server error" });
}
});

app.listen(PORT, () => {
console.log(`Proxy server running on http://localhost:${PORT}`);
});
Loading