Setting Up Your Project with dev-setup
The dev-setup folder is a critical part of your project setup. It contains scripts and configuration files to automate the installation of development tools and the setup of your development environment.
Overview of dev-setup Folder
The dev-setup folder typically includes the following files:
ntools.json
- Contains installation information for ntools. This file is required to install ntools before other deveopment tools.
apps.json
- Lists the development tools required for your project, including their installation and uninstallation details.
dev-setup.ps1
- A PowerShell script that installs the tools listed in apps.json and sets up the development environment.
File Details
1. ntools.json
This file provides the installation details for ntools, which is required to manage other tools in the project.
Example:
{
"Version": "1.2.0",
"NbuildAppList": [
{
"Name": "Ntools",
"Version": "1.8.0",
"AppFileName": "$(InstallPath)\\nb.exe",
"WebDownloadFile": "https://github.com/naz-hage/ntools/releases/download/$(Version)/$(Version).zip",
"DownloadedFile": "$(Version).zip",
"InstallCommand": "powershell.exe",
"InstallArgs": "-Command Expand-Archive -Path $(Version).zip -DestinationPath '$(InstallPath)' -Force",
"InstallPath": "$(ProgramFiles)\\Nbuild",
"UninstallCommand": "powershell.exe",
"UninstallArgs": "-Command Remove-Item -Path '$(InstallPath)' -Recurse -Force",
"StoredHash": "XXX",
"AddToPath": true
}
]
}
2. apps.json
This file lists all the development tools required for the project. Each tool is defined with its name, version, installation details, and uninstallation details.
Example:
{
"Version": "1.2.0",
"NbuildAppList": [
{
"Name": "7-zip",
"Version": "23.01",
"AppFileName": "$(InstallPath)\\7z.exe",
"WebDownloadFile": "https://www.7-zip.org/a/7z2301-x64.exe",
"DownloadedFile": "7zip.exe",
"InstallCommand": "$(DownloadedFile)",
"InstallArgs": "/S /D=\"$(ProgramFiles)\\7-Zip\"",
"InstallPath": "$(ProgramFiles)\\7-Zip",
"UninstallCommand": "$(InstallPath)\\Uninstall.exe",
"UninstallArgs": "/S"
}
]
}
Key Elements in apps.json:
Element Name | Description |
---|---|
Name |
The name of the tool. |
Version |
The version of the tool. |
AppFileName |
The file name of the tool, used to check if it is already installed. |
WebDownloadFile |
The URL to download the tool. |
DownloadedFile |
The name of the downloaded file, used for installation. |
InstallCommand |
The command to install the tool. |
InstallArgs |
The arguments for the installation command. |
InstallPath |
The location where the tool will be installed. |
UninstallCommand |
The command to uninstall the tool. |
UninstallArgs |
The arguments for the uninstallation command. |
StoredHash |
(Optional) SHA256 hash of the file for verification. |
AddToPath |
(Optional) Whether to add the tool's path to the system PATH environment variable. |
3. dev-setup.ps1
This PowerShell script automates the installation of tools and sets up the development environment.
Key Responsibilities: - Installs ntools using ntools.json. - Installs other tools listed in apps.json. - Verifies administrative privileges before proceeding.
Example:
# Import the install module
$url = "https://raw.githubusercontent.com/naz-hage/ntools/main/dev-setup/install.psm1"
$output = "./install.psm1"
Invoke-WebRequest -Uri $url -OutFile $output
Import-Module ./install.psm1 -Force
# Install Ntools
MainInstallApp -command install -json .\ntools.json
if ($LASTEXITCODE -ne 0) {
Write-OutputMessage "Error: Installation of ntools failed. Exiting script."
exit 1
}
# Install other tools
& $global:NbExePath install -json .\apps.json
if ($LASTEXITCODE -ne 0) {
Write-OutputMessage "Error: Installation of other tools failed. Exiting script."
exit 1
}
Write-OutputMessage "Completed installation script."
Folder Structure
Your project folder should look like this:
%MainDirectory%\
├── MyProject\
│ ├── dev-setup\
│ │ ├── ntools.json
│ │ ├── apps.json
│ │ ├── dev-setup.ps1
│ ├── ... other project and test files
│ └── nbuild.targets (this file is required in the solution folder)
Adding a New Development Tool
To add a new tool to your project: 1. Identify the tool's: - Download URL and file name. - Installation and uninstallation commands and arguments. - Installation path. - File name for version checks. - Version and name. 2. Add the tool's details to apps.json.
Example for a new tool:
{
"Name": "Docker",
"Version": "4.38.0.0",
"AppFileName": "$(InstallPath)\\Docker Desktop.exe",
"WebDownloadFile": "https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe",
"DownloadedFile": "Docker Desktop Installer.exe",
"InstallCommand": "$(DownloadedFile)",
"InstallArgs": "install --quiet",
"InstallPath": "$(ProgramFiles)\\Docker\\Docker",
"UninstallCommand": "powershell.exe",
"UninstallArgs": "-Command \"Remove-Item -Path '$(InstallPath)' -Recurse -Force\"",
"AddToPath": true
}
Notes
- Error Handling in
dev-setup.ps1
:- What happens if a tool fails to install? Are there retries or logs generated?
- Environment Variables:
- Are there any required environment variables for
dev-setup.ps1
to work?
- Are there any required environment variables for
- Dependencies:
- Are there any dependencies for the tools listed in apps.json (e.g., PowerShell version)?
- Testing the Setup:
- How can users verify that the setup was successful?