Within Submitty, we have a number of third-party dependencies to help augment the system. These can be broken down largely into a couple of categories:
- Other Submitty Repositories
- Third-Party Repositories
- Third-Party Distributions
- Third-Party Dependencies
Other Submitty Repositories
While much of the code that makes up Submitty resides within the primary Submitty/Submitty repository, there are some components that reside outside of it. These include:
Each of these dependencies are installed/updated as part of the process of running INSTALL_SUBMITTY.sh,
which in-turn calls .setup/bin/update_repos.sh
to either clone or update the repo as necessary. The
version that gets installed for each of these is defined in .setup/bin/versions.sh
. Each of these
are cloned into ${SUBMITTY_INSTALL_DIR}/GIT_CHECKOUT/
. Additionally, we do download the
generated binaries for the appropriate version of Submitty/AnalysisTools into
${SUBMITTY_INSTALL_DIR}/SubmittyAnalysisTools
to avoid the expensive process of getting the
whole stack toolchain to compile it on the spot.
Third-Party Repositories
While the GIT_CHECKOUT
folder mostly holds Submitty related repos, it does also contain these
third-party repos:
These repos are cloned under ${SUBMITTY_INSTALL_DIR}/GIT_CHECKOUT/vendor/
. Currently they are
not versioned.
Third-Party Distributions
For autograding, Submitty relies on a handful of third-party tools to handle stuff like memory analysis and test runners for some languages. These are:
The versions that we install of these is defined in .setup/bin/versions.sh
. These are only
installed at initial system installation as part of .setup/install_system.sh
. For
each of these, we download the compiled versions of the tool and then install into the
appropriate directory (e.g. ${SUBMITTY_INSTALL_DIR}/java_tools
for Java stuff,
${SUBMITTY_INSTALL_DIR}/drmemory
).
Third-Party Dependencies
To manage PHP dependencies, we use composer, and the packages it installs can be found in site/composer.json.
To manage JS/CSS dependencies, we use npm, and the packages it installs can be found in site/package.json.
As Submitty is an application, not a library, each dependency in both of those files are pinned to a specific
version, and should not be set to use a range (e.g. use 1.0.0
over ^1.0.0
).
For developing purposes, if there are code changes made to the packages managed by npm ( Submitty/pdf-annotate.js for example), to view the changes locally:
- Clone the repo for the package into the Submitty VM.
- Run
npm install
. - Run
npm run build
. - Edit the
site/package.json
on the host machine to have the package point to the new directory temporarily. For example,"@submitty/pdf-annotate.js": "file:///PATH/TO/THE/CLONED/REPO/IN/VM",
- Run the install script.
For python dependencies, we use pip. These are installed currently only at installation time, and not managed by Submitty currently. The current list of packages can be found in .setup/install_system. You should search for “pip3 install” to find all things that pip installs.