diff --git a/README.md b/README.md index 909b88d..df42323 100644 --- a/README.md +++ b/README.md @@ -43,3 +43,29 @@ is already set. If you want another registry flavor (i.e. `conservative`) this should be defined in the `env:` section of the relevant workflow or step. See [Registry flavors](https://pkgdocs.julialang.org/dev/registries/#Registry-flavors) for more information. + +### Adding Local Registries + +Personal registries, e.g. created with [LocalRegistry.jl](https://github.com/GunnarFarneback/LocalRegistry.jl), can be added to the CI using the `localregistry` input option. If the personal registry as well as packages needed in the current project are public, no additional setup is required if the registry url is specified in https-format. + +If the registry contains private packages, or is itself private, the ssh protocol should to be used. The user has to provide the corresponding private SSH-keys to the `ssh-agent` to access packages and registry. This can be conveniently done using the [webfactory/ssh-agent](https://github.com/webfactory/ssh-agent) action. A snippet illustrating the usage of (private) personal registries is shown below + +```yaml +... + # Adding private SSH keys (only necessary for accessing private packages and/or + # when providing Registry-link in ssh format) + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: | + ${{ secrets.PRIVATE_DEPLOY_KEY }} + ${{ secrets.PRIVATE_DEPLOY_KEY2 }} + - uses: julia-actions/julia-buildpkg@v1 + with: + localregistry: | + https://github.com/username/PersonalRegistry.git + git@github.com:username2/PersonalRegistry2.git + git_cli: false # = JULIA_PKG_USE_CLI_GIT. Options: true | false (default) +... +``` + +For Julia 1.7 and above, the `git_cli` option can be used to set the `JULIA_PKG_USE_CLI_GIT` [environment flag](https://docs.julialang.org/en/v1/manual/environment-variables/), for additional control of the SSH configuration used by `Pkg` to add/dev packages. \ No newline at end of file diff --git a/action.yml b/action.yml index f186951..0e518b6 100644 --- a/action.yml +++ b/action.yml @@ -13,6 +13,14 @@ inputs: precompile: description: 'Whether to allow auto-precompilation (via the `JULIA_PKG_PRECOMPILE_AUTO` env var). Options: yes | no. Default value: no.' default: 'no' + localregistry: + description: 'Add local registries hosted on GitHub. Specified by providing the url (https/ssh) to the repositories as a newline (\n) seperated list. + User is responsible for setting up the necessary SSH-Keys to access the repositories if necessary.' + default: '' + git_cli: + description: 'Determine if Pkg uses the cli git executable (Julia >= 1.7). Might be necessary for more complicated SSH setups. + Options: true | false. Default : false' + default: 'false' runs: using: 'composite' @@ -22,8 +30,30 @@ runs: shell: bash - run: | import Pkg - VERSION >= v"1.5-" && Pkg.Registry.add("General") + + # Determine if Pkg uses git-cli executable instead of LibGit2 + VERSION >= v"1.7-" && (ENV["JULIA_PKG_USE_CLI_GIT"] = ${{ inputs.git_cli }}) + + if VERSION < v"1.7-" && ${{ inputs.git_cli }} == true + printstyled("::notice::JULIA_PKG_USE_CLI_GIT requires Julia >= 1.7. Using default LibGit2 git-interface instead! \n"; color = :yellow) + end + + + if VERSION >= v"1.5-" + Pkg.Registry.add("General") + + # If provided add local registries + if !isempty("${{ inputs.localregistry }}") + local_repos = split("${{ inputs.localregistry }}", "\n") .|> string + for repo_url in local_repos + isempty(repo_url) && continue + Pkg.Registry.add(Pkg.RegistrySpec(; url = repo_url)) + end + end + end + VERSION >= v"1.1.0-rc1" ? retry(Pkg.build)(verbose=true) : retry(Pkg.build)() shell: julia --color=yes --project=${{ inputs.project }} {0} env: JULIA_PKG_PRECOMPILE_AUTO: "${{ inputs.precompile }}" + GITHUB_TOKEN: ${{ github.token }}