## ⚠️ATTENTION! ⚠️ Upgrading procedure: **Database:** After this PR will be merged you need to backup your DB first (you can use the db-assembler or any mysql client to generate the dump) and restore it after. The reason is that we use now docker named volumes instead of binded ones to improve performance. **Conf & client data**: if you use the default configuration, both the etc and the data folder are now available inside the **/env/docker**. Finally, you can cleanup the /docker folder previously used by our system. ## Changes Proposed: This PR will implement the [devcontainer ](https://code.visualstudio.com/docs/remote/containers) feature for VSCode. Allowing us to develop and debug directly within the container in the same way on all OSes. * Implemented support for vscode dev-container feature by remote-extension suite * Docker performance optimizations for MacOS and non-linux hosts * Bash system improvements * Implemented first command using Deno runtime environment (typescript) and [commander.js] * Implemented wait mechanism for db_assembler * Implemented db migration command * possibility to run the authserver and worldserver with GDB using the integrated simple-restarter * Implemented docker multi-stage mechanism to use one single Dockerfile for all the services * client-data downloader now creates a placeholder to avoid downloading the same version of data files multiple times * deployment of pre-compiled docker images on [docker hub](https://hub.docker.com/u/acore), you can test them [here](https://github.com/azerothcore/acore-docker)
Joiner v0.8.4
Universal crossplatform and agnostic dependency manager written in bash for any kind of module.
it is compatible with:
- Linux (natively)
- MacOS (natively)
- Windows (via mingw, wsl or other installable bash console)
This script is able to install and update modules and its dependencies via git clone, submodule or files directly. To install dependencies you must configure your repository to support Joiner. Read instructions below.
Projects that are using Joiner
features
- install modules via git clone/submodule or files/zipped folders
- update modules downloaded via git
- remove modules and its dependencies
- define and install dependencies or suggested modules
- since it uses bash, you can run any kind of task/script during install/uninstall (compilation, configuration etc.)
requirements
- bash
- git
- unzip
- curl
Installation
This command will download the script then you can directly run it or include in your script to run commands programmatically
git clone https://github.com/drassil/joiner.git drassil/joiner
if you want to include in your scripts you can use this code that will also automatically download the joiner if you don't have it yet and will keep it updated at each run (internally handled by joiner script):
J_PATH_MODULES="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/modules"
[ ! -d $J_PATH_MODULES/drassil/joiner ] && git clone https://github.com/drassil/joiner $J_PATH_MODULES/drassil/joiner -b master
source "$J_PATH_MODULES/drassil/joiner/joiner.sh"
Usage
You can run joiner executing it in a bash shell. It will prompt an interactive menu where you can run commands or just run them directly via command line (see below)
Alternatively you can use it programmatically running internal functions in your scripts (see below). It's also needed to create a module compatible with Joiner dependency manager.
Sample
This command will install js-lib-class modules and its dependencies
joiner add-repo https://github.com/HW-Core/js-lib-class
To install also development dependencies (test and documentation modules) you've to run:
joiner add-repo --dev https://github.com/HW-Core/js-lib-class
Options
-d|--dev: install development dependencies (see Joiner:with_dev)
-e|--extras: install extras dependencies (see Joiner:with_extras)
-z|--unzip: if adding a compressed file, this option will unzip it
Command line
-
add-repo (a): download and install a module from git repository.
Syntax: joiner.sh add-repo [-d] [-e] url name branch [basedir]
If you set name/branch as empty string ("") the system will use default values
-
upd-repo (u): update a module. Syntax: joiner.sh upd-repo [-d] [-e] url name branch [basedir]
If you set name/branch as empty string ("") the system will use default values
-
add-git-submodule (s): download and install module from git repository as git submodule.
Syntax: joiner.sh add-git-submodule [-d] [-e] url name branch [basedir]
If you set name/branch as empty string ("") the system will use default values
-
add-file (f): download and install a file or zipped folder.
Syntax: joiner.sh add-file [-d] [-e] [-z] source [destination]
-
remove (r): uninstall and remove a module.
Syntax: joiner.sh remove name [basedir]
-
self-update (j): Update joiner version to the latest stable (master branch)
Syntax: joiner.sh self-update
Programmatically usage
commands methods
Download and install a module from git repository.
Joiner:add_repo [-d] [-e] url name branch [basedir]
Update a module.
Joiner:upd_repo [-d] [-e] url name branch [basedir]
Download and install module from git repository as git submodule.
Joiner:add_git_submodule [-d] [-e] url name branch [basedir]
Download and install a file or zipped folder.
Joiner:add_file [-d] [-e] [-z] source [destination]
Uninstall and remove a module.
Joiner:remove name [basedir]
conditional methods
Check if Joiner has been run with --dev|-d option
Joiner:with_dev
return: true|false
Check if Joiner has been run with --extras|-e option
Joiner:with_extras
return: true|false
Update joiner version to the latest stable (master branch)
Joiner:self_update
How to create a Joiner module
Creating a Joiner compatible module is extremely simple. You just have to create following files in the root directory of your project:
install.sh
#!/usr/bin/env bash
J_PATH_MODULES="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/modules"
[ ! -d $J_PATH_MODULES/drassil/joiner ] && git clone https://github.com/drassil/joiner $J_PATH_MODULES/drassil/joiner -b master
source "$J_PATH_MODULES/drassil/joiner/joiner.sh"
## You can do any kind of pre-install task here
# ADD DEPENDENCIES
Joiner:add_repo "dependency-repo-url"
if Joiner:with_dev ; then
Joiner:add_repo "dev-dependency-repo-url"
fi
## You can do any kind of post-install task here
uninstall.sh
#!/usr/bin/env bash
J_PATH_MODULES="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/modules"
[ ! -d $J_PATH_MODULES/drassil/joiner ] && git clone https://github.com/drassil/joiner $J_PATH_MODULES/drassil/joiner -b master
source "$J_PATH_MODULES/drassil/joiner/joiner.sh"
#
# REMOVE DEPENDENCIES
#
Joiner:remove "dependency-folder-name"
If other dependencies are Joiner modules then joiner will install dependencies recursively, otherwise will just download them.
Contribute
Please use github platform to report an issue or ask anything you like: