name: 'LLM Release Notes Generator' description: 'Generate concise Markdown release notes from git commits using OmniRoute or OpenAI-compatible endpoints' author: 'Ricardo Mancinas' inputs: api_key: description: 'API key for OmniRoute or OpenAI-compatible endpoint' required: false default: '' base_url: description: 'API Base URL' required: false default: 'https://omni.freakma.com/v1' model: description: 'Model ID to query' required: false default: 'auto/fast' version: description: 'Target release version (e.g. 1.8.0)' required: false default: '' from_ref: description: 'Starting ref/tag for commit range (defaults to auto-detected previous tag)' required: false default: '' to_ref: description: 'Ending ref for commit range' required: false default: 'HEAD' tag_pattern: description: 'Tag pattern to match for previous release (e.g. v*)' required: false default: 'v*' max_commits: description: 'Maximum commits to inspect if no tag range found' required: false default: '50' fallback_notes: description: 'Fallback release notes if LLM call fails or API key is absent' required: false default: 'Maintenance updates and performance improvements.' timeout: description: 'API request timeout in seconds' required: false default: '25' temperature: description: 'Sampling temperature for generation' required: false default: '0.2' system_prompt: description: 'Custom system prompt override' required: false default: '' save_to_file: description: 'Optional file path to write release notes to' required: false default: '' outputs: notes: description: 'Generated markdown release notes' value: ${{ steps.generate.outputs.notes }} notes_file: description: 'Path to saved release notes file' value: ${{ steps.generate.outputs.notes_file }} runs: using: 'composite' steps: - name: Generate Release Notes id: generate shell: bash env: INPUT_API_KEY: ${{ inputs.api_key }} INPUT_BASE_URL: ${{ inputs.base_url }} INPUT_MODEL: ${{ inputs.model }} INPUT_VERSION: ${{ inputs.version }} INPUT_FROM_REF: ${{ inputs.from_ref }} INPUT_TO_REF: ${{ inputs.to_ref }} INPUT_TAG_PATTERN: ${{ inputs.tag_pattern }} INPUT_MAX_COMMITS: ${{ inputs.max_commits }} INPUT_FALLBACK_NOTES: ${{ inputs.fallback_notes }} INPUT_TIMEOUT: ${{ inputs.timeout }} INPUT_TEMPERATURE: ${{ inputs.temperature }} INPUT_SYSTEM_PROMPT: ${{ inputs.system_prompt }} INPUT_SAVE_TO_FILE: ${{ inputs.save_to_file }} run: | python3 "${{ github.action_path }}/scripts/generate_notes.py"