Updated to use environment variables if present, with manual overrides

This commit is contained in:
Steve White 2025-01-22 09:16:10 -06:00
parent 815f5f40b5
commit 6b04b192d6
3 changed files with 70 additions and 28 deletions

View File

@ -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:

81
gitea_cli.py Normal file → Executable file
View File

@ -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)

View File

@ -1,3 +1,2 @@
requests>=2.31.0
click>=8.1.0
python-dotenv>=1.0.0