App Types

The different types of apps in Bench

There are currently the following types of apps:

  • Typ group: app groups, with only a list of dependencies
  • Typ meta: apps with a fully customized setup process
  • Typ default: Windows executables from a downloaded file, archive, or setup
  • Typ node-package: Node.js packages, installable with NPM
  • Typ python-package: Python packages for Python 2 and 3 from PyPI, installable with PIP
  • Typ python2-package: Python packages for Python 2 from PyPI, installable with PIP
  • Typ python3-package: Python packages for Python 3 from PyPI, installable with PIP
  • Typ python-wheel: Python wheels for Python 2 and 3 from a downloaded .whl file, installable with PIP
  • Typ python2-wheel: Python wheels for Python 2 from a downloaded .whl file, installable with PIP
  • Typ python3-wheel: Python wheels for Python 3 from a downloaded .whl file, installable with PIP
  • Typ ruby-package: Ruby packages, installable with Gem
  • Typ nuget-package: NuGet packages, installable with NuGet

Group App

An app is a Group App if its Typ is set to group.

Technically a Group App behaves the same like a Meta App, but is is supposed to be used as a collection of dependencies only. That way, if the Group App is activated, all of its dependencies are implicitly activated too. They are a way to make the activation process of apps more comfortable or flexible.

Meta App

An app is a Meta App if its Typ is set to meta.

A Meta App is an app without an actual program. It can be used to fully customize the download and setup process of an app with custom scripts.

Default Windows App

An app is a Default Windows App if its Typ property is set to default or not set at all.

A Default Windows App is the definition for some kind of script or binary executable for the Windows operating system. In contrast to other apps, a Default Windows App has a program resource, which can be downloaded as a file. The resource can be an executable on its own, or an archive of some kind, even a setup or installer EXE.

A Default Windows App is extracted, and installed simply by copying its files into its target directory. Optionally some custom scripts can be executed during the setup process, to perform some additional configuration for the app.

Node.js Package

An app is a Node.js Package if its Typ property is set to node-package.

A Node.js Package is downloaded and installed by npm the Node.js package manager.

To determine, if a Node.js Package is already installed, the existence of its package folder in node_modules in the Node.js directory is checked.

Python Package

An app is a Python Package if its Typ property is set to python-package, python2-package, or python3-package.

A Python Package is downloaded and installed via PIP the Python package manager. Python Packages can be defined for Python 2 and Python 3 separately, or for both.

A package of typ python2-package automatically depends on Python 2 and is installed only with the PIP of Python 2. A package of typ python3-package automatically depends on Python 3 and is installed only with the PIP of Python 3. However, a package of typ python-package has slightly more complicated semantics.

  • If neither Python 2 nor Python 3 is activated explicitly, the package automatically depends on Python 3 but is installed with the PIP of all explictly or implictly activated Python versions.
  • If only one of both Python versions is activated explicitly, the package automatically depends on the explicitly activated version but is installed with the PIP of all explictly or implictly activated Python versions.
  • If both Python versions are activated explicitly, the package automatically depends on Python 3 but is installed with the PIP of both Python versions.

This means, a python-package implictly activates Python 3 if no Python version is explicitly activated, and it is installed in all activated Python versions.

To determine, if a Python Package is already installed, the existence of its package folder in lib\site-packages in the Python directory is checked.

Python Wheel

An app is a Python Wheel if its Typ property is set to python-wheel, python2-wheel, or python3-wheel.

A Python Wheel is downloaded from the Url and cached under the ResourceName. The downloaded .whl file is then installed via PIP the Python package manager. Python Wheels can be defined for Python 2 and Python 3 seperatly, or for both. The dependency and activation semantics are identical with Python Packages.

To determine, if a Python Wheel is already installed, the existence of its package folder in lib\site-packages in the Python directory is checked.

Ruby Package

An app is a Ruby Package if its Typ property is set to ruby-package.

A Ruby Package is actually a gem and is downloaded and installed by the Ruby package manager, also called gem.

To determine, if a Ruby gem is already installed, the existence of its package folder in lib\ruby\gems\<ruby-version>\gems in the Ruby directory is checked.

NuGet Package

An app is a NuGet Package if its Typ property is set to nuget-package.

A NuGet Package is one package from https://www.nuget.org/packages and all of its dependencies. The package and its dependencies are installed inside of the apps target directory lib\<AppDir> side-by-side. The individual package folders in the app target directory lib\<AppDir>\<PackageName> are created without a version number, to simplify building paths.

To determine, if a NuGet Package is already installed, the existence of the *.nupkg file of the main package lib\<AppDir>\<PackageName>\<PackageName>.nupkg is checked.