RegistryCI.jl

Continuous Integration (Unit Tests)Continuous Integration (Integration Tests)Code CoverageBors

RegistryCI provides continuous integration (CI) tools, including automated testing and automatic merging (automerge) of pull requests.

The General registry uses RegistryCI.

You can also use RegistryCI for your own Julia package registry.

Automatic merging guidelines

For the list of automatic merging guidelines, please see the General registry README.

RegistryCI.jl integration tests

For instructions on how to run the RegistryCI.jl integration tests on your local machine, see INTEGRATION_TESTS.md.

Using RegistryCI on your own package registry

In order to create and maintain a custom Julia registry, you can use LocalRegistry.jl. After you have the registry configured, you can setup CI using RegistryCI by following how it is used in the General registry.

Basic configuration

You will first need to copy the .ci folder in the root of the General registry to the root of your own registry. This folder contains some resources required for the RegistryCI package to work and update itself.

Next, you will need to copy the ci.yml and remember_to_update_registryci.yml workflow files.

The ci.yml file should be modified as follows if you have packages in your registry that depend on packages in the General registry. If the packages in your registry depend on packages in other registries, they should also be added to registry_deps

- run: julia --project=.ci/ --color=yes -e 'import RegistryCI; RegistryCI.test()'

+ run: julia --project=.ci/ --color=yes -e 'import RegistryCI; RegistryCI.test(registry_deps=["https://github.com/JuliaRegistries/General"])'

In the remember_to_update_registryci.yml file, the "${{ github.repository }}" == "JuliaRegistries/General" condition should be removed in order for the auto-update of RegistryCI to be enabled.

- run: julia -e 'include(".ci/remember_to_update_registryci.jl"); "${{ github.repository }}" == "JuliaRegistries/General" && RememberToUpdateRegistryCI.main(".ci"; registry = "${{ github.repository }}", cc_usernames = String[], old_julia_version = v"1.5.3")'

+ run: julia -e 'include(".ci/remember_to_update_registryci.jl"); RememberToUpdateRegistryCI.main(".ci"; registry = "${{ github.repository }}", cc_usernames = String[], old_julia_version = v"1.5.3")'

The self-update mechanism mentioned above uses a TAGBOT_TOKEN secret in order to create a pull request with the update. This secret is a personal access token which must have the repo scope enabled. To create the repository secret follow the instructions here. Use the name TAGBOT_TOKEN and the new PAT as the value.

TagBot triggers

If you want to use TagBot in the packages that you register in your registry, you need to also copy the TagBotTriggers.yml file. That workflow file also needs the TAGBOT_TOKEN secret mentioned above. In the TagBot.yml workflows of the registered packages you will also need to add the registry input as stated in the TagBot readme

with:
  token: ${{ secrets.GITHUB_TOKEN }}
  registry: MyOrg/MyRegistry

AutoMerge support

In order to enable automerge support, you will also have to copy the automerge.yml file and change the AutoMerge invocation appropriately

using RegistryCI
using Dates
RegistryCI.AutoMerge.run(
    merge_new_packages = ENV["MERGE_NEW_PACKAGES"] == "true",
    merge_new_versions = ENV["MERGE_NEW_VERSIONS"] == "true",
    new_package_waiting_period = Day(3),
    new_jll_package_waiting_period = Minute(20),
    new_version_waiting_period = Minute(10),
    new_jll_version_waiting_period = Minute(10),
    registry = "MyOrg/MyRegistry",
    tagbot_enabled = true,
    authorized_authors = String["TrustedUser"],
    authorized_authors_special_jll_exceptions = String[""],
    suggest_onepointzero = false,
    additional_statuses = String[],
    additional_check_runs = String[],
    check_license = true,
    public_registries = String["https://github.com/HolyLab/HolyLabRegistry"],
)

Most importantly, the following should be changed

registry = "MyOrg/MyRegistry",
authorized_authors = String["TrustedUser"],

Acknowledgements

Dilum Aluthge would like to acknowledge the following:

  • This work was supported in part by National Institutes of Health grants U54GM115677, R01LM011963, and R25MH116440. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.