Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Channel installation support #1047

Merged
merged 113 commits into from
Mar 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
4664146
channel_config.json
olemp Mar 8, 2023
99c982f
.tasks/generate-package-solution.js
olemp Mar 10, 2023
70f7fb4
generate-package-solution.js
olemp Mar 10, 2023
6a94795
Test channel config
olemp Mar 10, 2023
5f21f81
Task generate-channel-config.js
olemp Mar 10, 2023
cb48cfc
Removed unused channel config (old format)
olemp Mar 10, 2023
ad9eff3
CHANNEL_CONFIG build release
olemp Mar 10, 2023
0d51862
Updated .gitignore
olemp Mar 16, 2023
49d7edf
Added packages
olemp Mar 16, 2023
c76bbb9
generatePackageSolution.js
olemp Mar 16, 2023
f8b376e
Ignoring .dist
olemp Mar 16, 2023
19e4818
.tasks/generate-pnp-templates.js
olemp Mar 16, 2023
0455c38
Build-Release.ps1
olemp Mar 16, 2023
d3ce610
Build-Release updates
olemp Mar 16, 2023
4bc3208
Added warning message when running with channel config
olemp Mar 16, 2023
0ba30a8
ci-channels.yml
olemp Mar 16, 2023
9e9ed61
Updated CI (channels)
olemp Mar 16, 2023
fdc20c6
Temp commit to trigger CI
olemp Mar 16, 2023
df5ab51
Not piping npm run generate-site-scripts output to null to debug
olemp Mar 16, 2023
bb339d9
.gitgnore etc
olemp Mar 16, 2023
aac25d5
npm ci
olemp Mar 16, 2023
3e9d0a0
>$null 2>&1
olemp Mar 16, 2023
b738bb7
Test-Path $ChannelConfigPath and minor adjustments
olemp Mar 16, 2023
8cc77c8
Changed channel config for test, parantheticals are not allowed in ap…
olemp Mar 16, 2023
a54ae8e
Removed -SkipSiteDesign
olemp Mar 21, 2023
e6d7567
CopyListData._getProperties: Workaround for 32 char field internal na…
olemp Mar 22, 2023
1b25d66
Build-Release Channel param
olemp Mar 22, 2023
9216e84
argv = require('yargs').argv
olemp Mar 22, 2023
baead31
main channel
olemp Mar 22, 2023
973bd57
Updated script names for Templates
olemp Mar 22, 2023
c2b52c0
Generate JSON templates for Portfolio and Project sites
olemp Mar 22, 2023
bf843ce
Adding tokens for {{ControlId_* to JsonTemplates
olemp Mar 22, 2023
80ce97a
Build-Release script
olemp Mar 22, 2023
24ac3c8
run: Install/Build-Release.ps1 -CI -SkipBundle -Channel test
olemp Mar 22, 2023
ad4c5fa
Adjusted Templates/.tasks/generateJsonTemplates.js
olemp Mar 22, 2023
cf69716
Object.keys(resourcesJson).forEach(language
olemp Mar 22, 2023
51c890d
Initial FooterApplicationCustomizer
olemp Mar 23, 2023
ad198d2
Added field InstallChannel
olemp Mar 23, 2023
e76469a
Added more resources to PortfolioExtensionsStrings
olemp Mar 23, 2023
39c5acf
Reverted serve script
olemp Mar 23, 2023
6f488cf
Footer component
olemp Mar 23, 2023
2ae2bb7
installEntries
olemp Mar 23, 2023
2cf0824
Install.ps1: $InstallEntry.InstallChannel = $Channel
olemp Mar 23, 2023
197fbbc
Added component 84f27cec-ffde-4e00-a4cf-25c69f691054 to Portfolio
olemp Mar 23, 2023
eaf4c2a
Footer now showing channel name if specified
olemp Mar 23, 2023
2ecc4c3
Footer now showing channel name if specified
olemp Mar 23, 2023
1d6ec2a
Installing to https://puzzlepart.sharepoint.com/sites/pp365_test
olemp Mar 23, 2023
9355c78
Updated test channel
olemp Mar 23, 2023
01071da
Updated main channel
olemp Mar 23, 2023
956a206
Installation_channels.md
olemp Mar 23, 2023
8711f76
Installed version moved to right section of footer
olemp Mar 23, 2023
e39a6ae
Build release package for staging channel
olemp Mar 23, 2023
a2011cc
release_notes
olemp Mar 23, 2023
9ba485e
Minor adjustments to Build-Release.ps1 [skip-ci]
olemp Mar 23, 2023
4cadb83
Added staging channel configuration
olemp Mar 23, 2023
0cc9c93
Added $schema.json for channel configuration [skip-ci]
olemp Mar 23, 2023
c57cc74
Added staging channel configuration and made seeAllInstallationsLink …
olemp Mar 23, 2023
71c8a73
Added install duration to footer [skip-ci]
olemp Mar 23, 2023
d9fd4e5
Build-Release.ps1: Testing JSON towards the schema [skip-ci]
olemp Mar 23, 2023
a11d5ee
Fixed paths in .github/workflows/ci-channels-temp.yml
olemp Mar 23, 2023
39494d3
Forcing hiddenFromToolbox=true for web parts when building for a chan…
olemp Mar 23, 2023
8e5a4b4
ci-channels-temp workflow also builds to https://puzzlepart.sharepoin…
olemp Mar 23, 2023
90a0bbf
Minor adjustment to Build-Releae.ps1
olemp Mar 24, 2023
be2def1
ci-releases.yml should temporarily trigger on branch feat/channel-sup…
olemp Mar 24, 2023
4077e80
Build-Release.ps1 not piping to >$null 2>&1
olemp Mar 24, 2023
76e1299
ci-channels-temp.yml
olemp Mar 24, 2023
ceda80c
build_release_package_prod
olemp Mar 24, 2023
69e4d41
Fixed issue in Templates/.tasks/generateJsonTemplates.js
olemp Mar 24, 2023
d02d6b6
Reverted Install/Build-Release.ps1
olemp Mar 24, 2023
ee4d304
.github/workflows/ci-channels-temp.yml
olemp Mar 24, 2023
26d93de
Minor adjustment to Install.ps1 script
olemp Mar 27, 2023
7a1c66d
Fikset feil relatert til henting av hubchildren (#1041)
Remi749 Mar 10, 2023
7ad655a
Fiks for kommandolinje og standard egenskaper på prosjekttidslinje (#…
Remi749 Mar 8, 2023
39fac81
Fikse feil på 'Hent prosjektdata' dialog (#1048)
Remi749 Mar 22, 2023
6a35d7f
CopyListData._getProperties: Workaround for 32 char field internal na…
olemp Mar 22, 2023
ae9ec1e
SharePoint "Full kontroll" tilgangsnivå rettighetssjekk (#1055)
Remi749 Mar 24, 2023
fe1070d
Tilgang for å opprette porteføljeoversikt-visninger er nå basert på t…
olemp Mar 24, 2023
fd1657f
Håndterer ugyldig låst mal (i property bag) i prosjektoppsettet (#1061)
olemp Mar 28, 2023
9ed7060
Fiks for doble scrollbars på hjelpeinnhold-vindu (#1062)
olemp Mar 29, 2023
777b853
Porteføljeoversikt: vis personlige visninger som egen "seksjon" (#1063)
olemp Mar 29, 2023
34583b6
Alfabetisk filtrering på filter-verdier for Ressursallokering (#1060)
olemp Mar 29, 2023
a799779
Merge branch 'releases/1.8' into feat/channel-support
olemp Mar 29, 2023
e839ce7
Merge branch 'releases/1.8' into feat/channel-support
olemp Mar 29, 2023
d656eff
Removed .github/workflows/ci-channels-temp.yml
olemp Mar 29, 2023
ad29cc0
Added workflow for building to channel test [channels/test]
olemp Mar 29, 2023
2acae86
Updated paths for workflow [channels/test]
olemp Mar 29, 2023
8e93074
v1.8.1
olemp Mar 29, 2023
46cc45f
SP_URL_TEST: "https://puzzlepart.sharepoint.com/sites/pp365_channels_…
olemp Mar 29, 2023
c5c2fdf
ci-channel-test.yml: Trigger CI [channels/test]
olemp Mar 29, 2023
dbe687b
Fix for package-lock not matching package file [channels/test]
olemp Mar 29, 2023
2f6b03f
Attempting to attach the log file to installation entry [channels/sta…
olemp Mar 29, 2023
f0c4d91
Removed staging channel
olemp Mar 29, 2023
d0fe2c9
Fikset feil relatert til henting av hubchildren (#1041)
tarjeieo Mar 7, 2023
6334336
Fiks for kommandolinje og standard egenskaper på prosjekttidslinje (#…
Remi749 Mar 8, 2023
98c5520
v1.8.1
olemp Mar 29, 2023
b9dd05c
README
olemp Mar 29, 2023
c3e738e
Merge branch 'releases/1.9' into feat/channel-support
olemp Mar 29, 2023
65d8e74
Updated package-lock
olemp Mar 29, 2023
27cf591
Updated CI
olemp Mar 29, 2023
477fa8a
Updated CHANGELOG
olemp Mar 29, 2023
11f310d
Updated CHANGELOG with correct issue reference (#1068)
olemp Mar 29, 2023
9f36957
Updated dev guide
olemp Mar 29, 2023
b5e74c6
ci-channel-test.yml on.push.branches updated [channels/test]
olemp Mar 29, 2023
867f764
Build-Release.ps1: Added ValidateSet to $Channel parameter
olemp Mar 29, 2023
c44f529
generatePackageSolution.js => modifySolutionFiles.js
olemp Mar 30, 2023
fa263cb
generated-solution-config.json => .generated-solution-config.json [ch…
olemp Mar 30, 2023
ac73b33
Fix for generateProjectTemplates.js that created empty templates [cha…
olemp Mar 30, 2023
a2f3c03
Git now ignores Templates/*.ps1
olemp Mar 30, 2023
7c1c948
Added component <LatestGitHubRelease /> [channels/test]
olemp Mar 30, 2023
4eedf01
Minor adjustments to <LatestGitHubRelease /> component
olemp Mar 30, 2023
7a38572
Footer should be part of a separate PR
olemp Mar 30, 2023
ae58372
Adjustments
olemp Mar 30, 2023
7060c99
Removed custom action for footer
olemp Mar 30, 2023
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
2 changes: 1 addition & 1 deletion .README
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@

[[load:readme/5-Vedlikehold.md]]

[[load:readme/6-Utvikling.md]]
[[load:readme/6-Utvikling.md]]
229 changes: 11 additions & 218 deletions .development-guide/.README
Original file line number Diff line number Diff line change
Expand Up @@ -6,231 +6,24 @@
[[ template:toc ]]
</details>

## Site Design / Site Scripts
[[load:.development-guide/Site_Design_Site_Scripts.md]]

Everything related to the site design and the corresponding site scripts reside in the folder **SiteScripts**.
[[load:.development-guide/JS_Provisioning_Template.md]]

The source files are found in the **src** folder.
[[load:.development-guide/Templates.md]]

## JS Provisioning Template
[[load:.development-guide/NPM.md]]

Not everything we want to do is available with site designs, so we're also using [sp-js-provisioning](https://github.com/Puzzlepart/sp-js-provisioning). Please note that we're using the Puzzlepart fork from **pnp**.
[[load:.development-guide/Building_a_new_release.md]]

With our PnP content templates (see **3.2.2**) we're provisioning a default template. The default templates for our supported languages are built from the source file [_JsonTemplate.json](../Templates/_JsonTemplate.json).
[[load:.development-guide/Building_only_PnP_templates.md]]

Please note the **Parameters** object.
[[load:.development-guide/Continuous_integration.md]]

```json
{
"Parameters": {
"ProvisionSiteFields": "Kolonner for Prosjektportalen (Prosjekt)",
"ProjectContentTypeId": "0x0100805E9E4FEAAB4F0EABAB2600D30DB70C",
"ProjectStatusContentTypeId": "0x010022252E35737A413FB56A1BA53862F6D5"
}
}
```
[[load:.development-guide/Creating_a_new_release.md]]

| Parameter | Description |
| -------------------------- | ------------------------------------------------------------------------------------- |
| ProvisionSiteFields | The site fields in this group will be copied to the project site during provisioning. |
| ProjectContentTypeId | Content type ID for the Project properties content type |
| ProjectStatusContentTypeId | Content type ID for the Project status content type |
[[load:.development-guide/Versioning.md]]

In addition to the parameters specified in [Standardmal.txt](../Templates/Portfolio/Prosjektmaler/Standardmal.txt), there's also the following parameters:
[[load:.development-guide/Installation_channels.md]]

| Parameter | Description |
| ---------- | ------------------------------------------------------------------------------------- |
| TermSetIds | An map of term set fields and term set id. Used to override the default term set ids. |

Say you'd like to use the term set with ID **54da9f47-c64e-4a26-80f3-4d3c3fa1b7b2** for project phase. The internal field name for project phase is **GtProjectPhase**. With the default template, the **Parameters** object would look like this:

```json
{
"Parameters": {
"ProvisionSiteFields": "Kolonner for Prosjektportalen (Prosjekt)",
"ProjectContentTypeId": "0x0100805E9E4FEAAB4F0EABAB2600D30DB70C",
"ProjectStatusContentTypeId": "0x010022252E35737A413FB56A1BA53862F6D5",
"TermSetIds": {
"GtProjectPhase": "54da9f47-c64e-4a26-80f3-4d3c3fa1b7b2"
}
}
}
```

## Templates

### JSON provisioning template

At the root level of the **Templates** folder, the following files are found:

| File/Folder | Description |
| ------------------------------- | --------------------------------------------------------------------------------------------- |
| `Clean-Resx.ps1` | Script to remove unused **.resx** resources |
| `Find-FieldUsage.ps1` | Script to find field usage |
| `Get-ComponentProperties.ps1` | Script to get component properties from `<pnp:ClientSidePage>` instances |
| `Encode-JSON.ps1` | Script to take the content of a JSON file, encode and minfiy at, and store it in a `.txt`file |
| `Search-Resx.ps1` | Script to search for unused **.resx** resources |
| `tasks/generateResxJson.js` | Node script to generate a JSON representation of the **.resx** files |
| `tasks/generateJsonTemplate.js` | Node script to generate JSON templates for each language |
| `_JsonTemplate.json` | JSON project template |

#### Building JSON templates

When doing changes to the JSON template the npm task `watch` can be used. This watches `_JsonTemplate.json` and builds localized version of this to the corresponding Content template.

Resources from the **.resx** files in the folder Portfolio can be used in the template using `{{tokens}}`.

**Example:**

```json
{
"ID": "0x0100A87AE71CBF2643A6BC9D0948BD2EE897",
"Name": "{{ContentTypes_Uncertainty_Name}}",
"Description": "",
"Group": "{{ContentTypes_Group}}"
}
```

### PnP templates

In addition we have two PnP provisioning templates.

| Template | Description |
| ----------------------------------- | ---------------- |
| [Portfolio](../Templates/Portfolio) | Portfolio assets |
| [Taxonomy](../Templates/Taxonomy) | Taxonomy |

#### Portfolio

| File/Folder | Description |
| ------------------ | -------------------------------------------------------------- |
| Objects | PnP assets. See https://github.com/pnp/PnP-Provisioning-Schema |
| SiteAssets | Files to be uploaded to SiteAssets |
| Portfolio.xml | Main template file |
| `Resources.*.resx` | Resource files |

#### Content templates

Content templates are found in the **Content** folder. The name of the template follows the following pattern:

`Portfolio_content.{language_code}.xml`
`Portfolio_content_BA.{language_code}.xml`

`language_code` can be for example **no-NB** or **en-US**.

The templates contains the JSON template(s), planner tasks and phase checklist items.

## NPM

The SharePoint Framework solutions are published to `npm` independently.

- [@Shared](https://www.npmjs.com/package/pp365-shared)
- [ProjectWebParts](https://www.npmjs.com/package/pp365-projectwebparts)
- [ProjectExtensions](https://www.npmjs.com/package/pp365-projectextensions)
- [PortfolioWebParts](https://www.npmjs.com/package/pp365-portfoliowebparts)
- [ProgramWebParts](https://www.npmjs.com/package/pp365-programwebparts)
- [PortfolioExtensions](https://www.npmjs.com/package/pp365-portfolioextensions)

## Building a new release

To build a new release make sure your on the `main` branch and in sync with **origin**.

Run the PowerShell script `Build-Release.ps1` located in the `Install` directory:

```powershell
./Install/Build-Release.ps1
```

The installation package should be found in the release folder.

## Building only PnP templates

To only build PnP templates make sure your on the `main` branch and in sync with **origin**.

Run the PowerShell script `Build-Release.ps1` located in the `Install` directory:

```powershell
./Install/Build-Release.ps1 -SkipBuildSharePointFramework
```

The PnP templates should be found in the release folder.

## Continuous integration

We have set up continuous integration using GitHub actions.

[![CI (dev)](https://github.com/Puzzlepart/prosjektportalen365/actions/workflows/ci-dev.yml/badge.svg?branch=dev)](https://github.com/Puzzlepart/prosjektportalen365/actions/workflows/ci-dev.yml)

Keywords can be used in the commit message to avoid (or force) the CI running some of the jobs.

- `[skip-ci]` to avoid the _Build release package_ job starting. This will result in no jobs starting as the _Upgrade_ and _Install_ jobs are dependent on the job _Build release package_
- `[skip-upgrade]` to avoid the _Uprade_ job starting. This will also skip the _Install_ job as it's dependent on _Upgrade_
- `[skip-install]` to avoid the _Install_ job starting.
- `[upgrade-all-sites-to-latest]` to run script `UpgradeAllSitesToLatest.ps1` in CI mode

### Build and install (dev)

[ci-releases](../.github/workflows/ci-releases.yml) builds a new release on _push_ to **releases/***.

It runs [Build-Release.ps1](../Install/Build-Release.ps1) with `-CI` param, then runs [Install.ps1](../Install/Install.ps1) (also with `-CI` param, this time with a encoded string consisting of the username and password, stored in a GitHub secret). The URL to install to is stored in the GitHub secret `CI_DEV_TARGET_URL`.

With the current approach, with no cache (as it runs `npm ci`), a full run takes about 25-35 minutes.

![image-20201121133532960](assets/image-20201121133532960.png)

### Build release (main)

[build-release](../.github/workflows/build-release.yml) builds a new release package on **push** to **main**.

## Creating a new release

For creating a new release, we have two options: Minor and patch. New minor version should be created when there is new functionality of interest to users, while patch versions can be created often with bug fixes, adjustments and minimal functional improvements.

Increasing the version number is done by npm scripts. This is done on the dev-branch when the functionality currently in dev is deemed ready for release.


### Patch-release
```powershell
npm version patch
git push --tags
```

### Minor-release
```powershell
npm version minor
git push --tags
```

Then create a Pull Request to merge `dev` into `main`. The output from GitHub Actions will include a release package that can be shared as a release on GitHub. No manual build required.

## Versioning

After updating the version using `npm version patch` or `npm version minor` the task `tasks/automatic-versioning.js` are run. This synchronizes versions across the solution.

This `automatic-versioning.js` task can also be run as a **npm script** outside the `postversion` event.

```powershell
npm run sync-version
```

After the `sync-version` script has been run, it is important to publish the SharePointFramework packages (@Shared, PortfolioWebParts, etc...) to npm.

This is done for each package by running the following script:

```powershell
npm install; npm run build; npm publish;
```

If you have to update and use a package under development add a temp tag:

```powershell
npm install; npm run build; npm publish --tag temp;
```

N.B.: To be able to publish you must sign in with an account that has access to the packages at [npmjs](https://www.npmjs.com)

## README generation

READMEs are automatically generated using [@appnest/readme](https://github.com/andreasbm/readme). The main README is generated from [.README](../.README) while this README is generated from [.README](.README). The generation is configured with the `blueprint.json` files.

For the main [README.md)[../README.md] generation, the different parts are included from the [readme](../readme) folder at root level.
[[load:.development-guide/README_generation.md]]
11 changes: 11 additions & 0 deletions .development-guide/Building_a_new_release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## Building a new release

To build a new release make sure your on the `main` branch and in sync with **origin**.

Run the PowerShell script `Build-Release.ps1` located in the `Install` directory:

```powershell
./Install/Build-Release.ps1
```

The installation package should be found in the release folder.
11 changes: 11 additions & 0 deletions .development-guide/Building_only_PnP_templates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## Building only PnP templates

To only build PnP templates make sure your on the `main` branch and in sync with **origin**.

Run the PowerShell script `Build-Release.ps1` located in the `Install` directory:

```powershell
./Install/Build-Release.ps1 -SkipBuildSharePointFramework
```

The PnP templates should be found in the release folder.
32 changes: 32 additions & 0 deletions .development-guide/Continuous_integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
## Continuous integration

We have set up continuous integration using GitHub actions.

### CI (releases/*)
[![CI (releases)](https://github.com/Puzzlepart/prosjektportalen365/actions/workflows/ci-releases.yml/badge.svg?branch=releases/1.9)](https://github.com/Puzzlepart/prosjektportalen365/actions/workflows/ci-releases.yml)

Keywords can be used in the commit message to avoid (or force) the CI running some of the jobs.

- `[skip-ci]` to avoid the _Build release package_ job starting. This will result in no jobs starting as the _Upgrade_ and _Install_ jobs are dependent on the job _Build release package_
- `[skip-upgrade]` to avoid the _Uprade_ job starting. This will also skip the _Install_ job as it's dependent on _Upgrade_
- `[skip-install]` to avoid the _Install_ job starting.
- `[upgrade-all-sites-to-latest]` to run script `UpgradeAllSitesToLatest.ps1` in CI mode

### Build and install (dev)

[ci-releases](../.github/workflows/ci-releases.yml) builds a new release on _push_ to **releases/***.

It runs [Build-Release.ps1](../Install/Build-Release.ps1) with `-CI` param, then runs [Install.ps1](../Install/Install.ps1) (also with `-CI` param, this time with a encoded string consisting of the username and password, stored in a GitHub secret). The URL to install to is stored in the GitHub secret `CI_DEV_TARGET_URL`.

With the current approach, with no cache (as it runs `npm ci`), a full run takes about 25-35 minutes.

![image-20201121133532960](assets/image-20201121133532960.png)

### CI (channels/test)
Keyword `[channels/test]` needs to be used in the commit message for this CI to run.

It will build a package for channel [test](../channels/test.json) and deploy it to the URL specified in `SP_URL_TEST`.

### Build release (main)

[build-release](../.github/workflows/build-release.yml) builds a new release package on **push** to **main**.
20 changes: 20 additions & 0 deletions .development-guide/Creating_a_new_release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## Creating a new release

For creating a new release, we have two options: Minor and patch. New minor version should be created when there is new functionality of interest to users, while patch versions can be created often with bug fixes, adjustments and minimal functional improvements.

Increasing the version number is done by npm scripts. This is done on the dev-branch when the functionality currently in dev is deemed ready for release.


### Patch-release
```powershell
npm version patch
git push --tags
```

### Minor-release
```powershell
npm version minor
git push --tags
```

Then create a Pull Request to merge `dev` into `main`. The output from GitHub Actions will include a release package that can be shared as a release on GitHub. No manual build required.
26 changes: 26 additions & 0 deletions .development-guide/Installation_channels.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
## Installation channels

To support installing several instances of _Prosjektportalen 365_ in a tenant, we support **installation channels**.

### Generating a new channel configuration
To generate a new channel configuration, use the `npm` script `generate-channel-config`.

To generate a new channel configuration for `test`:

```javascript
npm run-script generate-channel-config test
```

To update an existing channel configuration, add the flag `/update`:

```javascript
npm run-script generate-channel-config test /update
```

### Building a new release for a channel
To build a new release for a channel, add the `-Channel` flag when running the release-script.

**Example (buiding for test channel):**
```powershell
Install/Build-Release.ps1 -Channel test
```
Loading