Metadata-Version: 2.4
Name: cal-gitlab-releases
Version: 1.1.0
Summary: Download and upload release assets for GitLab projects and groups
Project-URL: Repository, https://gitlab.com/cyberassessmentlabs/private/tools/cal-gitlab-releases
Author: Cyber Assessment Labs
License-Expression: MIT
License-File: LICENSE
Keywords: assets,download,gitlab,releases,upload
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Build Tools
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown

# cal-gitlab-releases

Download and upload release assets for GitLab projects and groups.

## Installation

```bash
pip install cal-gitlab-releases
```

## Usage

```bash
# Download release assets from a group
cal-gitlab-releases download -u https://gitlab.com -p myorg/public -o ./releases

# Upload release assets to a target GitLab
cal-gitlab-releases upload -u https://gitlab.example.com -p target-group -i ./releases -t TOKEN
```

## Commands

### download

Download release assets from GitLab projects or groups. Supports version filtering, manifest-based incremental downloads, and parallel threads.

Use `--flat` to download all files into a single directory (useful for manual inspection). Note that flat output cannot be used with the `upload` command, which requires the `project/tag` directory structure.

#### Size limits

Use `--max-file-size` (`-S`) to skip individual files larger than a threshold, and `--max-total-size` (`-T`) to cap the total bytes downloaded in a single session. Both accept human-readable suffixes: `K`, `M`, `G`, `T` (e.g., `500M`, `10G`). Files skipped due to size limits are recorded in the manifest so they are not re-attempted on subsequent runs. Files skipped by the total size budget are *not* recorded, so the next run will pick them up.

### upload

Upload release assets to GitLab. Reads the same directory structure produced by `download`, creates releases if they don't exist, and attaches asset files as release links.

## Configuration

Settings can be provided via CLI args, environment variables, or a config file at `~/.config/cal-gitlab-releases/config.json`:

```json
{
    "gitlab_url": "https://gitlab.example.com",
    "token": "glpat-xxxxxxxxxxxx",
    "base_group": "myorg",
    "output": "./downloads",
    "version_filter": "release",
    "parallel": 32,
    "max_file_size": "500M",
    "max_total_size": "10G",
    "project_exclude": ["private/tools/harproxy"]
}
```

## Licence

MIT License — Copyright (c) 2026 Cyber Assessment Labs
