CLI-Only Mode

dist-git-manager can be used without a YAML configuration file for single-repository updates using only command-line arguments.

Overview

CLI-only mode is useful for:

  • One-off repository updates

  • CI/CD pipelines

  • Scripting

  • Testing a single package without creating a config file

  • When you don’t need to manage multiple projects

Quick Example

dist-git-manager --repo-url https://src.fedoraproject.org/rpms/htop.git \
    --package-name htop \
    --version-source anitya --anitya-id 1234 \
    --spec-manager packit \
    --release-type semver --default-branch rawhide \
    --upstream-url https://github.com/htop-dev/htop \
    --upstream-tag-template "v{version}" \
    --dry-run

Required Arguments

When not using --config, these arguments are required:

--repo-url URL              Dist-git repository URL
--package-name NAME         Package name
--version-source TYPE       Version source: anitya, crates_io, or pypi
--spec-manager TYPE         Spec manager: packit, rust2rpm, or pyp2spec
--release-type TYPE         Release type: semver or rolling
--default-branch BRANCH     Default branch name (e.g., rawhide, main)

Version Source Options

Anitya

--version-source anitya --anitya-id 1234

Additional required arguments:

  • --anitya-id ID: Anitya project ID (integer)

Optional arguments:

  • --anitya-token TOKEN: API token for higher rate limits

crates.io

--version-source crates_io

No additional arguments required. Package name from --package-name is used as crate name.

PyPI

--version-source pypi

No additional arguments required. Package name from --package-name is used.

Spec Manager Options

Packit

--spec-manager packit \
--upstream-url https://github.com/user/project \
--upstream-tag-template "v{version}"

Additional required arguments:

  • --upstream-url URL: Upstream project repository URL

  • --upstream-tag-template TEMPLATE: Git tag template (use {version} placeholder)

rust2rpm

--spec-manager rust2rpm

No additional arguments required.

Prerequisites: rust2rpm must be installed (dnf install rust2rpm)

pyp2spec

--spec-manager pyp2spec

No additional arguments required.

Prerequisites: pyp2spec must be installed (dnf install pyp2spec)

Optional Arguments

--work-dir DIR              Working directory (default: /tmp/dist-git-manager)
--git-user-name NAME        Git user name for commits
--git-user-email EMAIL      Git user email for commits
--auto-push                 Automatically push changes to remote
--dry-run                   Preview changes without applying
-v, --verbose               Enable verbose logging

Utility Commands

--list-plugins              List available version sources and spec managers
--version                   Show version and exit
--help                      Show help and exit

Complete Examples

Example 1: Anitya + Packit (Dry Run)

dist-git-manager \
    --repo-url https://src.fedoraproject.org/rpms/htop.git \
    --package-name htop \
    --version-source anitya \
    --anitya-id 1234 \
    --spec-manager packit \
    --upstream-url https://github.com/htop-dev/htop \
    --upstream-tag-template "{version}" \
    --release-type semver \
    --default-branch rawhide \
    --dry-run --verbose

Example 2: crates.io + rust2rpm

dist-git-manager \
    --repo-url https://src.fedoraproject.org/rpms/rust-serde.git \
    --package-name serde \
    --version-source crates_io \
    --spec-manager rust2rpm \
    --release-type semver \
    --default-branch rawhide \
    --git-user-name "Rust Bot" \
    --git-user-email "rust-bot@example.com"

Example 3: PyPI + pyp2spec with Auto-push

dist-git-manager \
    --repo-url https://src.fedoraproject.org/rpms/python-requests.git \
    --package-name requests \
    --version-source pypi \
    --spec-manager pyp2spec \
    --release-type semver \
    --default-branch rawhide \
    --git-user-name "Python Bot" \
    --git-user-email "python-bot@example.com" \
    --auto-push

Example 4: Rolling Release

dist-git-manager \
    --repo-url https://src.fedoraproject.org/rpms/vim.git \
    --package-name vim \
    --version-source anitya \
    --anitya-id 5678 \
    --spec-manager packit \
    --upstream-url https://github.com/vim/vim \
    --upstream-tag-template "v{version}" \
    --release-type rolling \
    --default-branch rawhide

Validation

CLI-only mode validates that:

  • All required arguments are provided

  • Arguments are not mixed with --config (mutually exclusive)

  • Version source and spec manager specific requirements are met

If validation fails, an error message indicates which arguments are missing.

When to Use CLI-Only vs Config-Driven

Use CLI-only mode when:

  • Updating a single repository

  • Running in CI/CD pipelines

  • Quick one-off updates

  • Testing before creating a config file

  • Scripting individual package updates

Use config-driven mode when:

  • Managing multiple projects

  • Running regularly (cron, systemd timer)

  • Complex multi-package setups

  • Want to version control configuration

  • Need to share configuration with team

Mixing Modes

You cannot mix CLI-only arguments with --config:

# This is an error:
dist-git-manager --config config.yaml --repo-url https://...

Choose either config-driven OR CLI-only mode, not both.

Environment Variables

Environment variables work the same in CLI-only mode:

  • ANITYA_API_TOKEN: Anitya API token (alternative to --anitya-token)

export ANITYA_API_TOKEN="your-token"
dist-git-manager --version-source anitya --anitya-id 1234 ...