diff --git a/README.md b/README.md index 1e3bace..776c8f8 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,19 @@ A command line interface for interacting with Gitea servers. ## Configuration -Create a `.env` file in the project root with your Gitea credentials: +You can configure the Gitea CLI in two ways: -```env -GITEA_URL=https://your-gitea-instance.com -GITEA_TOKEN=your_access_token +### 1. Environment Variables +Set the following environment variables: +```bash +export GITEA_URL=https://your-gitea-instance.com +export GITEA_TOKEN=your_access_token +``` + +### 2. Command Line Arguments +Alternatively, provide the configuration via command line arguments: +```bash +python gitea_cli.py create-repo --gitea-url https://your-gitea-instance.com --gitea-token your_access_token --name my-repo ``` To get an access token: diff --git a/gitea_cli.py b/gitea_cli.py old mode 100644 new mode 100755 index aa42aa8..d25e39d --- a/gitea_cli.py +++ b/gitea_cli.py @@ -1,18 +1,10 @@ -#!/usr/bin/env python3 +#!/opt/homebrew/anaconda3/bin/python import os import sys import click import requests import subprocess -from dotenv import load_dotenv - -# Load environment variables -load_dotenv() - -# Get Gitea configuration from environment -GITEA_URL = os.getenv('GITEA_URL') -GITEA_TOKEN = os.getenv('GITEA_TOKEN') class GiteaAPI: def __init__(self, base_url, token): @@ -40,14 +32,29 @@ class GiteaAPI: else: response.raise_for_status() -def validate_environment(): - """Validate that required environment variables are set.""" - if not GITEA_URL: - click.echo("Error: GITEA_URL environment variable is not set") - sys.exit(1) - if not GITEA_TOKEN: - click.echo("Error: GITEA_TOKEN environment variable is not set") +def get_gitea_config(url=None, token=None): + """Get Gitea configuration from environment or command line arguments.""" + config = { + 'url': url or os.environ.get('GITEA_URL'), + 'token': token or os.environ.get('GITEA_TOKEN') + } + + missing = [] + if not config['url']: + missing.append('GITEA_URL') + if not config['token']: + missing.append('GITEA_TOKEN') + + if missing: + missing_str = ', '.join(missing) + click.echo(f"Error: Missing required configuration: {missing_str}") + click.echo("Please either:") + click.echo("1. Set environment variables for the missing values") + click.echo("2. Provide them as command line arguments:") + click.echo(" --gitea-url URL --gitea-token TOKEN") sys.exit(1) + + return config def is_git_repository(): """Check if current directory is a git repository.""" @@ -85,20 +92,48 @@ def set_git_remote(repo_url): @click.group() def cli(): - """Gitea CLI - Command line interface for Gitea""" + """Gitea CLI - Command line interface for Gitea + + Configuration can be provided in two ways: + 1. Environment variables: + - GITEA_URL: Your Gitea server URL + - GITEA_TOKEN: Your Gitea API token + + 2. Command line arguments: + --gitea-url and --gitea-token + (These override environment variables if both are present) + """ pass @cli.command() @click.option('--name', required=True, help='Name of the repository') @click.option('--description', default="", help='Repository description') @click.option('--private', is_flag=True, default=False, help='Make repository private') -@click.option('--set-remote', is_flag=True, default=False, help='Set the remote origin for the current git repository') -def create_repo(name, description, private, set_remote): - """Create a new repository on Gitea.""" - validate_environment() +@click.option('--set-remote', is_flag=True, default=False, + help='Set the remote origin for the current git repository') +@click.option('--gitea-url', + help='Gitea server URL (overrides GITEA_URL environment variable)') +@click.option('--gitea-token', + help='Gitea API token (overrides GITEA_TOKEN environment variable)') +def create_repo(name, description, private, set_remote, gitea_url, gitea_token): + """Create a new repository on Gitea. + + Examples: + Using environment variables: + $ export GITEA_URL=https://gitea.example.com + $ export GITEA_TOKEN=your_token + $ gitea_cli.py create-repo --name my-repo + + Using command line arguments: + $ gitea_cli.py create-repo --gitea-url https://gitea.example.com --gitea-token your_token --name my-repo + + Create private repo and set as remote: + $ gitea_cli.py create-repo --name my-repo --private --set-remote + """ + config = get_gitea_config(gitea_url, gitea_token) try: - gitea = GiteaAPI(GITEA_URL, GITEA_TOKEN) + gitea = GiteaAPI(config['url'], config['token']) repo = gitea.create_repository(name, description, private) click.echo(f"Successfully created repository: {repo['html_url']}") @@ -111,7 +146,7 @@ def create_repo(name, description, private, set_remote): # Replace HTTPS URL with token-based URL for authentication if clone_url.startswith('https://'): parsed_url = clone_url.split('://') - clone_url = f"{parsed_url[0]}://oauth2:{GITEA_TOKEN}@{parsed_url[1]}" + clone_url = f"{parsed_url[0]}://oauth2:{config['token']}@{parsed_url[1]}" set_git_remote(clone_url) diff --git a/requirements.txt b/requirements.txt index 4e016c4..cd7518e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,2 @@ requests>=2.31.0 click>=8.1.0 -python-dotenv>=1.0.0