Assuming all we want to use is GitHub, the best way does not exist but there are couple of alternatives used by folks around.
Regardless of the final installation method it is safe to say that it is beneficial to first have a .paclet file created (search around for PackPaclet) and, depending on the method, attached to a GitHub release.
TLDR I am using ResourceFunction["GitHubInstall"][ author_, name_ ]
1.1. install.m script
You can add an install.m
script in your repository. User is supposed to call Import @ "url/to/install.m"
and the installation procedure does whatever you want it to do.
Examples:
Pros:
- flexible installation routine
Cons:
- ugly url to type by the user:
https://raw.githubusercontent.com/`username`/`pacletName`/master/install.m
, sure it can be copied but the fewer steps the better.
1.2 ResourceFunction
installation script
Presented in Szabolcs' MaTeX where the installation script is a ResourceFunction
:
Examples:
Pros:
- flexible installation routine
- simple call e.g.
ResourceFunction["MyPacletInstall"]
Cons:
- The resource function needs to be verified by WRI before it is available
2. GitHub hosted PacletSite
You just build .paclet to your repository and update PacletSite.info.
Example:
Pros:
- once paclet site is added user can quickly check for updates etc.
- all WRI built-in functions based deploy-release-install
Cons:
- Adds a lot of weight to your repository since binary .paclets need to be kept there. For this reason probably not the best for large or frequently updated projects.
3.1. A paclet installation manager
The idea is to install a 'paclet manager' once and it should handle standard Github released packages.
Examples
MPM`
I created a simple installation manager MPM`: https://github.com/kubaPod/MPM
Once you install it (using install.m :)) you can just call MPMInstall["szhorvat", "MaTeX"]
. Check more examples in the GitHub wiki or this answer
Import["https://raw.githubusercontent.com/kubapod/mpm/master/install.m"] (*only once*)
Needs @ "MPM`"
MPMInstall["kubapod", "devtools"]
PDInstallPaclet
Alternatively take a look at b3m2a1's PDInstallPaclet
Pros:
- easy to use
- full of utilities
Cons:
- you need to trust the source of the manager like MPM (otoh with plain text .m it is easy to inspect)
- unless standards are expanded it only does paclet install and any fancy setup needs to be run separately
3.2. ResourceFunction["GitHubInstall"]
I pushed a reduced version of the MPMInstall
to the function repository. It is straightforward to use:
ResourceFunction["GitHubInstall"]["szhorvat", "matex"]
see ResourceFunction["GitHubInstall", "DocumentationNotebook"]
for more information.
Cons and Pros the same as with 3.1 + it is easier to use.
PacletSite.mz
file and use a bit more of the (I think still undocumented) Paclet functionality. How to do that is answered here, although the question is not really a duplicate to this one. There might be possibilities to achieve this (latest release URL) with github functionality, but there might be better places to get answers to that... $\endgroup$updateMaTeX[]
function here: github.com/szhorvat/MaTeX#installation IGraph/M has a more complicated version of the same: github.com/szhorvat/IGraphM/blob/master/IGInstaller.m The FEMAddOns installer was also based on a version of this code. $\endgroup$