Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433"
LocalRegistry = "89398ba2-070a-4b16-a995-9893c55d93cf"
Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
Expand All @@ -25,6 +26,7 @@ ExplicitImports = "1"
HTTP = "1"
JSON3 = "1"
JuliaFormatter = "2"
LocalRegistry = "0.5"
SnoopCompileCore = "3"
Statistics = "1"
TOML = "1"
Expand Down
4 changes: 4 additions & 0 deletions docs/src/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ result = bump_and_register_repo("/path/to/repo")
println("Registered packages: ", result.registered)
println("Failed packages: ", result.failed)

# Register monorepo packages without bumping versions
result = register_monorepo_packages("/path/to/monorepo")
println("Successfully registered: ", length(result.registered), " packages")

# Process all repositories in the SciML organization
results = bump_and_register_org("SciML"; auth_token = "your_github_token")

Expand Down
105 changes: 79 additions & 26 deletions docs/src/version_bumping.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ The version bumping and registration tools:
- Automatically increment minor version numbers in Project.toml files
- Handle main packages and subpackages in `lib/` directories
- Create git commits for version changes
- Register packages to Julia registries (placeholder functionality)
- Register packages to Julia registries using LocalRegistry.jl
- Process entire GitHub organizations at once
- Support monorepo structures with interdependent packages

## Functions

Expand Down Expand Up @@ -61,44 +62,53 @@ end

### `register_package`

Register a Julia package to the specified registry.
Register a Julia package to the specified registry using LocalRegistry.

```julia
register_package(package_dir::String; registry_url = "https://github.com/JuliaRegistries/General")
register_package(package_dir::String; registry = "General", push::Bool = false)
```

**Parameters:**

- `package_dir`: Directory containing the package to register
- `registry_url`: URL of the target registry (default: General registry)
- `registry`: Name or path to the registry (default: "General")
- `push`: Whether to push the registration to the remote registry (default: false)

**Returns:** `true` on success
**Returns:** `true` on success, `false` on failure

!!! note

This is currently a placeholder function. In practice, it would use `LocalRegistry.jl` or similar tools for actual registration.
**Example:**

```julia
# Register to General registry
register_package("/path/to/MyPackage")

# Register to custom registry with push
register_package("/path/to/MyPackage"; registry="MyRegistry", push=true)
```

### `bump_and_register_repo`

Bump minor versions and register all packages in a repository.
Bump minor versions and register all packages in a repository (including monorepos).

```julia
bump_and_register_repo(repo_path::String; registry_url = "https://github.com/JuliaRegistries/General")
bump_and_register_repo(repo_path::String; registry = "General", push::Bool = false)
```

**Parameters:**

- `repo_path`: Path to the repository
- `registry_url`: URL of the target registry
- `registry`: Name or path to the registry (default: "General")
- `push`: Whether to push registrations to remote registry (default: false)

**Returns:** Named tuple `(registered=String[], failed=String[])`

This function:

1. Updates the main Project.toml (if exists)
2. Updates all lib/*/Project.toml files
3. Attempts to register each package
1. Bumps minor versions in all Project.toml files
2. Collects all package directories (main + lib/*)
3. Uses brute-force dependency resolution for registration order
4. Commits version changes to git
5. Handles monorepo structures with interdependent packages

**Example:**

Expand All @@ -108,6 +118,46 @@ println("Successfully registered: ", result.registered)
println("Failed to register: ", result.failed)
```

### `register_monorepo_packages`

Register all packages in a monorepo without bumping versions.

```julia
register_monorepo_packages(repo_path::String; registry = "General", push::Bool = false)
```

**Parameters:**

- `repo_path`: Path to the repository root directory
- `registry`: Name or path to the registry (default: "General")
- `push`: Whether to push registrations to remote registry (default: false)

**Returns:** Named tuple `(registered=String[], failed=String[])`

This function is similar to `bump_and_register_repo` but only performs registration without modifying package versions. It's useful when:

- Versions have already been bumped manually
- You want to register packages at their current versions
- You need to retry registration after fixing issues

**Features:**

- Scans for all packages (main Project.toml and lib/*/Project.toml)
- Uses brute-force dependency resolution
- Handles circular dependencies and complex dependency graphs
- Does NOT modify any Project.toml files or create commits

**Example:**

```julia
# Register all packages in a monorepo
result = register_monorepo_packages("/path/to/repo")
println("Successfully registered: ", length(result.registered), " packages")

# Register with custom registry
register_monorepo_packages("/path/to/repo"; registry="MyRegistry", push=true)
```

### `get_org_repos`

Get all repositories for a GitHub organization.
Expand All @@ -129,16 +179,18 @@ Bump minor versions and register all packages in all repositories of a GitHub or

```julia
bump_and_register_org(org::String;
registry_url = "https://github.com/JuliaRegistries/General",
registry = "General",
push::Bool = false,
auth_token::String = "",
work_dir::String = mktempdir())
```

**Parameters:**

- `org`: GitHub organization name
- `registry_url`: URL of the target registry
- `auth_token`: GitHub authentication token
- `registry`: Name or path to the registry (default: "General")
- `push`: Whether to push registrations to remote registry (default: false)
- `auth_token`: GitHub authentication token (recommended for rate limits)
- `work_dir`: Working directory for cloning repositories

**Returns:** Dictionary mapping repository names to results
Expand Down Expand Up @@ -234,17 +286,18 @@ The functions include comprehensive error handling:
## Limitations

- Currently only bumps minor versions (not major or patch)
- Registration is a placeholder (requires LocalRegistry.jl integration)
- Assumes semantic versioning (MAJOR.MINOR.PATCH)
- Requires git to be configured with appropriate credentials
- Registration requires appropriate permissions for the target registry

## API Summary

| Function | Description |
|:------------------------------------------------- |:------------------------------ |
| `bump_minor_version(version_str)` | Increment minor version number |
| `update_project_version(project_path)` | Update version in Project.toml |
| `register_package(package_dir; registry_url)` | Register package (placeholder) |
| `bump_and_register_repo(repo_path; registry_url)` | Process entire repository |
| `get_org_repos(org; auth_token)` | List organization repositories |
| `bump_and_register_org(org; kwargs...)` | Process entire organization |
| Function | Description |
|:------------------------------------------------- |:---------------------------------------- |
| `bump_minor_version(version_str)` | Increment minor version number |
| `update_project_version(project_path)` | Update version in Project.toml |
| `register_package(package_dir; kwargs...)` | Register package using LocalRegistry |
| `bump_and_register_repo(repo_path; kwargs...)` | Bump versions and register all packages |
| `register_monorepo_packages(repo_path; kwargs...)` | Register monorepo packages without bumping |
| `get_org_repos(org; auth_token)` | List organization repositories |
| `bump_and_register_org(org; kwargs...)` | Process entire organization |
2 changes: 1 addition & 1 deletion src/OrgMaintenanceScripts.jl
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ include("explicit_imports_fixer.jl")
# Include documentation cleanup functionality
include("documentation_cleanup.jl")

export bump_and_register_repo, bump_and_register_org
export bump_and_register_repo, bump_and_register_org, register_monorepo_packages
export format_repository, format_org_repositories
export update_manifests, update_project_tomls, update_project_versions_all
export fix_package_min_versions, fix_repo_min_versions, fix_org_min_versions
Expand Down
Loading
Loading