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 ------------- .. code-block:: bash 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: .. code-block:: text --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 ~~~~~~ .. code-block:: bash --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 ~~~~~~~~~ .. code-block:: bash --version-source crates_io **No additional arguments required.** Package name from ``--package-name`` is used as crate name. PyPI ~~~~ .. code-block:: bash --version-source pypi **No additional arguments required.** Package name from ``--package-name`` is used. Spec Manager Options --------------------- Packit ~~~~~~ .. code-block:: bash --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 ~~~~~~~~ .. code-block:: bash --spec-manager rust2rpm **No additional arguments required.** **Prerequisites:** ``rust2rpm`` must be installed (``dnf install rust2rpm``) pyp2spec ~~~~~~~~ .. code-block:: bash --spec-manager pyp2spec **No additional arguments required.** **Prerequisites:** ``pyp2spec`` must be installed (``dnf install pyp2spec``) Optional Arguments ------------------ .. code-block:: text --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 ---------------- .. code-block:: text --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) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: bash 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: bash 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: bash 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: bash 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``: .. code-block:: bash # 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``) .. code-block:: bash export ANITYA_API_TOKEN="your-token" dist-git-manager --version-source anitya --anitya-id 1234 ...