diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 3aa610b..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -labels: 'bug' - ---- - -## Describe the bug -A clear and concise description of what the bug is. - -## To Reproduce -Steps to reproduce the behavior OR commands run: -1. Go to '...' -2. Click on '....' -3. Enter value '...' -4. See error - -## Expected behavior -A clear and concise description of what you expected to happen. - -## Screenshots -If applicable, add screenshots to help explain your problem. - -## Additional context -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..07fc71a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,82 @@ +name: Bug Report +description: Create a report to help us improve +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Please supply complete reproduction details to speed up resolution. + + - type: textarea + id: bug-description + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + placeholder: Tell us what went wrong. + validations: + required: true + + - type: textarea + id: reproduction-steps + attributes: + label: Steps to Reproduce + description: Steps to reproduce the behavior OR commands run + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Enter value '...' + 4. See error + validations: + required: true + + - type: textarea + id: expected-state + attributes: + label: Expected state + description: A clear and concise description of what you expected to happen + placeholder: What should have happened? + validations: + required: true + + - type: dropdown + id: severity + attributes: + label: Impact / Severity + description: Level of impact + options: + - Blocker + - High + - Medium + - Low + validations: + required: true + + - type: textarea + id: evidence + attributes: + label: Attachments / Evidence + description: Logs, screenshots, traces. + placeholder: Paste relevant excerpts. + validations: + required: false + + - type: textarea + id: os-browser-version + attributes: + label: Desktop + description: What are your OS, browser, and version? + placeholder: | + OS: e.g., Windows 10, macOS 11.2, Ubuntu 20.04 + Browser: e.g., Chrome, Safari, Firefox + Version: e.g., 22 + validations: + required: false + + - type: textarea + id: related + attributes: + label: Related / References + description: Link other issues/PRs. + placeholder: "#456, #789" + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/devops_task.yml b/.github/ISSUE_TEMPLATE/devops_task.yml new file mode 100644 index 0000000..e7777bc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/devops_task.yml @@ -0,0 +1,17 @@ +name: DevOps Task +description: Issue template for a task about setting up the project. Usually not touching the codebase. +labels: ["infrastructure"] +body: + - type: markdown + attributes: + value: | + A clear and concise description of the task to be done. + + - type: textarea + id: task-description + attributes: + label: The task + description: Short description of the task + placeholder: Describe what needs to be done + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/documentation_task.yml b/.github/ISSUE_TEMPLATE/documentation_task.yml new file mode 100644 index 0000000..4fc01c6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation_task.yml @@ -0,0 +1,53 @@ +name: Documentation +description: Update or create technical or operational documentation +labels: ["documentation"] +body: + - type: markdown + attributes: + value: | + Provide clear purpose and scope for the documentation update. + + - type: input + id: summary + attributes: + label: Summary + description: Short description of the documentation update. + placeholder: e.g. Add onboarding guide for new microservice + validations: + required: true + + - type: textarea + id: current-state + attributes: + label: Current State (If Updating) + description: Briefly describe existing content or gap. + placeholder: Existing runbook lacks failure recovery steps. + validations: + required: false + + - type: textarea + id: proposed-changes + attributes: + label: Proposed Changes + description: Key additions, removals, or restructures. + placeholder: Add section on X; remove deprecated Y. + validations: + required: true + + - type: textarea + id: dependencies + attributes: + label: Dependencies / References + description: Link related issues, PRs, external standards. + placeholder: "#123, ADR-7, compliance doc link." + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Any other information about the documentation update here. + placeholder: Add any other relevant context. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/epic_task.md b/.github/ISSUE_TEMPLATE/epic_task.md deleted file mode 100644 index f7411e2..0000000 --- a/.github/ISSUE_TEMPLATE/epic_task.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Epic -about: A larger task consisting of more deliverables -labels: 'epic' ---- - -## Background -A clear and concise intro into the situation. - -## Goal -The goal that epic wants to achieve. - -```[tasklist] -### Tasks -- [ ] Add a draft title or issue reference here -``` diff --git a/.github/ISSUE_TEMPLATE/epic_task.yml b/.github/ISSUE_TEMPLATE/epic_task.yml new file mode 100644 index 0000000..47c156f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/epic_task.yml @@ -0,0 +1,47 @@ +name: Epic +description: A larger task consisting of more deliverables. +labels: ["epic"] +body: + - type: markdown + attributes: + value: | + Use this template for large initiatives with multiple child issues. + + - type: textarea + id: background + attributes: + label: Background + description: High-level narrative and intended outcomes. + placeholder: Platform modernization initiative. + validations: + required: true + + - type: textarea + id: goals + attributes: + label: Goals + description: Bullet list of measurable goals. + placeholder: What do we want to accomplish? + validations: + required: true + + - type: textarea + id: subtasks + attributes: + label: Subtasks + description: List of planned child issues. + placeholder: | + - [ ] #123 Subtask 1 + - [ ] #223 Subtask 2 + - [ ] #323 Subtask 3 + validations: + required: false + + - type: textarea + id: references + attributes: + label: Related / References + description: Docs, ADRs, previous epics links. + placeholder: ADR-12 link, design doc. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 74a56c3..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -labels: 'enhancement' - ---- - -## Background -A clear and concise description of where the limitation lies. - -## Feature -A description of the requested feature. - -## Example [Optional] -A simple example if applicable. - -## Proposed Solution [Optional] -Solution Ideas: -1. -2. -3. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..66331ff --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,65 @@ +name: Feature Request +description: Suggest an idea for this project. +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thank you for suggesting an improvement. Please provide clear, actionable detail. + + - type: textarea + id: feature-description + attributes: + label: Feature Description + description: A clear and concise description of what you want to happen. + placeholder: Describe the feature you'd like to see. + validations: + required: true + + - type: textarea + id: problem + attributes: + label: Problem / Opportunity + description: What user/business problem does this solve? Who benefits? + placeholder: Current pain, limitation, or missed opportunity. + validations: + required: true + + - type: textarea + id: acceptance + attributes: + label: Acceptance Criteria + description: Clear, testable outcomes. Use bullet points. + placeholder: | + 1. User can... + 2. API returns... + 3. Performance within... + validations: + required: true + + - type: textarea + id: proposed-solution + attributes: + label: Proposed Solution + description: High-level approach. Mention alternatives if considered. + placeholder: Describe the direction without full implementation detail. + validations: + required: false + + - type: textarea + id: dependencies + attributes: + label: Dependencies / Related + description: Link related issues, epics, or external docs. + placeholder: "#123, #456, ADR link" + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Any other information or screenshots about the feature request here + placeholder: Add any other relevant context or screenshots + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/operative_task.yml b/.github/ISSUE_TEMPLATE/operative_task.yml new file mode 100644 index 0000000..14fd100 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/operative_task.yml @@ -0,0 +1,55 @@ +name: Operative / Management Task +description: General-purpose template for operational, management, and non-development tasks +labels: ["operative"] +body: + - type: markdown + attributes: + value: | + Use this flexible template for operational, management, planning, or administrative tasks. + + - type: input + id: summary + attributes: + label: Task Summary + description: Brief one-line description of the task + placeholder: e.g., Organize Q2 planning meeting, Update team guidelines. + validations: + required: true + + - type: textarea + id: description + attributes: + label: Description + description: Detailed description of what needs to be done and why + placeholder: Provide context, background, and objectives for this task + validations: + required: true + + - type: textarea + id: objectives + attributes: + label: Objectives / Goals + description: What are we trying to achieve? + placeholder: | + - Objective 1 + - Objective 2 + validations: + required: false + + - type: input + id: deadline + attributes: + label: Deadline / Target Date + description: When should this be completed? + placeholder: YYYY-MM-DD or "End of Sprint 5" + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Any other relevant information, links, or attachments + placeholder: Links to documents, previous discussions, related materials + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/pointer.yml b/.github/ISSUE_TEMPLATE/pointer.yml new file mode 100644 index 0000000..e879cdf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/pointer.yml @@ -0,0 +1,71 @@ +name: Pointer +description: Track external work referenced across repositories +labels: ["pointer"] +body: + - type: markdown + attributes: + value: | + Use pointer issues to track external work (other repos, third-party tasks) impacting this domain. + + - type: input + id: summary + attributes: + label: Summary + description: Short description of external work. + placeholder: e.g. Migration of auth service in repo X + validations: + required: true + + - type: textarea + id: references + attributes: + label: Source / External References + description: List external issues/PRs/links (one per line). + placeholder: | + repo-a#123 + repo-b#456 + Design doc link + validations: + required: true + + - type: dropdown + id: relationship + attributes: + label: Relationship Type + description: Nature of linkage + options: + - Dependency + - Blocking + - Follow-up + - Mirroring + - Audit + - Observability + validations: + required: true + + - type: textarea + id: reason + attributes: + label: Reason for Tracking + description: Why visibility matters (release, compliance, coordination). + placeholder: Release impact; compliance trace; dependency risk. + validations: + required: true + + - type: textarea + id: closure + attributes: + label: Closure Conditions + description: When can this pointer be closed? + placeholder: External PR merged + deployed + docs updated. + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Any other information about the pointer here. + placeholder: Add any other relevant context. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md deleted file mode 100644 index 24ba89d..0000000 --- a/.github/ISSUE_TEMPLATE/question.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Question -about: Ask a question -labels: 'question' - ---- - -## Background [Optional] -A clear explanation of the reason for raising the question. -This gives us a better understanding of your use cases and how we might accommodate them. - -## Question -A clear and concise inquiry diff --git a/.github/ISSUE_TEMPLATE/spike_task.md b/.github/ISSUE_TEMPLATE/spike_task.md deleted file mode 100644 index d071e81..0000000 --- a/.github/ISSUE_TEMPLATE/spike_task.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: Spike -about: Issue template for spikes, research and investigation tasks -labels: 'spike' - ---- - -## Background -A clear and concise description of the problem or a topic we need to understand. - -Feel free to add information about why it's needed and what assumptions you have at the moment. - -## Questions To Answer - -1. -2. -3. - -## Desired Outcome - -The list of desired outcomes of this spike ticket. - -```[tasklist] -### Tasks -- [ ] Questions have been answered or we have a clearer idea of how to get to our goal -- [ ] Discussion with the team -- [ ] Documentation -- [ ] Create recommendations and new implementation tickets -- [ ] item here.. -``` - -## Additional Info/Resources [Optional] - -1. -2. -3. diff --git a/.github/ISSUE_TEMPLATE/spike_task.yml b/.github/ISSUE_TEMPLATE/spike_task.yml new file mode 100644 index 0000000..f5fd388 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/spike_task.yml @@ -0,0 +1,60 @@ +name: Spike +description: Issue template for spikes, research and investigation tasks. +labels: ["spike"] +body: + - type: markdown + attributes: + value: | + Use this form for research/investigation tasks. Keep scope tight. + + - type: textarea + id: background + attributes: + label: Background + description: Describe the problem or topic we need to understand. + placeholder: Tell us what you need to research or investigate. + validations: + required: true + + - type: textarea + id: questions + attributes: + label: Questions To Answer + description: List the key questions that need to be answered + placeholder: | + 1. Question one + 2. Question two + 3. Question three + validations: + required: true + + - type: textarea + id: desired-outcome + attributes: + label: Desired Outcome + description: List the desired outcomes of this spike ticket. + placeholder: What should be the result of this investigation? + validations: + required: true + + - type: checkboxes + id: tasks + attributes: + label: Tasks + options: + - label: Questions have been answered or we have a clearer idea of how to get to our goal + - label: Discussion with the team + - label: Documentation + - label: Create recommendations and new implementation tickets + + - type: textarea + id: additional-info + attributes: + label: Additional Info/Resources + description: Optional additional information or resources + placeholder: | + 1. Resource one + 2. Resource two + 3. Resource three + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/technical_debt.yml b/.github/ISSUE_TEMPLATE/technical_debt.yml new file mode 100644 index 0000000..a30adc7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/technical_debt.yml @@ -0,0 +1,96 @@ +name: Technical Debt +description: Track and address technical debt items to improve code quality, maintainability, or architecture. +labels: ["tech debt"] +body: + - type: markdown + attributes: + value: | + Use this template to document technical debt that should be addressed to improve long-term code health. + + - type: textarea + id: debt-description + attributes: + label: Description of Technical Debt + description: What is the current state that needs improvement? + placeholder: Describe the technical debt (outdated dependencies, code smells, architecture issues, etc.) + validations: + required: true + + - type: textarea + id: impact + attributes: + label: Impact of Technical Debt + description: What problems does this debt cause or risk causing? + placeholder: | + - Slows down development + - Increases bug risk + - Makes testing difficult + - Blocks future features + validations: + required: true + + - type: dropdown + id: category + attributes: + label: Category + description: Type of technical debt + options: + - Code Quality / Refactoring + - Architecture / Design + - Dependencies / Libraries + - Documentation + - Testing / Test Coverage + - Performance + - Security + - DevOps / Infrastructure + - Other + validations: + required: true + + - type: dropdown + id: priority + attributes: + label: Priority + description: How urgent is this to address? + options: + - High - Actively causing problems + - Medium - Should be addressed soon + - Low - Nice to have + validations: + required: true + + - type: textarea + id: proposed-solution + attributes: + label: Proposed Solution + description: How should this be addressed? Include alternatives if applicable. + placeholder: Describe the refactoring approach, migration plan, or improvement strategy. + validations: + required: false + + - type: input + id: effort-estimate + attributes: + label: Effort Estimate + description: Rough estimate of work required + placeholder: e.g., 1 day, 1 week, 2 sprints + validations: + required: false + + - type: textarea + id: dependencies + attributes: + label: Dependencies / Related + description: Link related issues, epics, or documentation. + placeholder: "#123, #456, ADR link" + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Any other relevant information, links to discussions, or examples. + placeholder: Add code snippets, links to similar work, or other references. + validations: + required: false diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..323ac01 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,11 @@ + +## Overview + + +## Release Notes +- TBD: 1st item of release notes +- TBD: 2nd item of release notes + + +## Related +Closes #issue_number diff --git a/.github/workflows/check_pr_release_notes.yml b/.github/workflows/check_pr_release_notes.yml index 6b90c43..c8f6355 100644 --- a/.github/workflows/check_pr_release_notes.yml +++ b/.github/workflows/check_pr_release_notes.yml @@ -1,3 +1,19 @@ +# +# Copyright 2025 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + name: Check PR Release Notes on: @@ -7,19 +23,20 @@ on: jobs: check-release-notes: - name: Check PR Release Notes runs-on: ubuntu-latest steps: - - uses: actions/setup-python@v5.1.1 + - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 with: python-version: '3.13' - name: Check presence of release notes in PR description - uses: AbsaOSS/release-notes-presence-check@v0.2.1 + uses: AbsaOSS/release-notes-presence-check@8e586b26a5e27f899ee8590a5d988fd4780a3dbf env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: github-repository: ${{ github.repository }} pr-number: ${{ github.event.number }} - title: '(\*\*[Rr]elease [Nn]otes\*\*|[Rr]elease [Nn]otes:)' + title: "## [Rr]elease [Nn]otes" + skip-labels: 'no RN' + skip-placeholders: 'TBD' diff --git a/.github/workflows/release_draft.yml b/.github/workflows/release_draft.yml index 43c1a6b..9a01675 100644 --- a/.github/workflows/release_draft.yml +++ b/.github/workflows/release_draft.yml @@ -1,4 +1,20 @@ -name: Release - create draft release +# +# Copyright 2025 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: Draft Release on: workflow_dispatch: inputs: @@ -13,28 +29,28 @@ jobs: release-draft: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 with: fetch-depth: 0 persist-credentials: false - - uses: actions/setup-python@v5.1.1 + - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 with: python-version: '3.13' - - name: Check format of received tag + - name: Check Format of Received Tag id: check-version-tag - uses: AbsaOSS/version-tag-check@v0.3.0 + uses: AbsaOSS/version-tag-check@36496be76eab24e1f14d45d3b8292311a2aebaaa env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - github-repository: ${{ github.repository }} - version-tag: ${{ github.event.inputs.tag-name }} + github-repository: ${{ github.repository }} + version-tag: ${{ github.event.inputs.tag-name }} - - name: Check format of received from tag + - name: Check Format of Received From Tag if: ${{ github.event.inputs.from-tag-name }} id: check-version-from-tag - uses: AbsaOSS/version-tag-check@v0.3.0 + uses: AbsaOSS/version-tag-check@36496be76eab24e1f14d45d3b8292311a2aebaaa env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -44,28 +60,41 @@ jobs: - name: Generate Release Notes id: generate_release_notes - uses: AbsaOSS/generate-release-notes@v0.6.0 + uses: AbsaOSS/generate-release-notes@B90223510d1704301a36a36f0d86a72a0e72f0cf env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag-name: ${{ github.event.inputs.tag-name }} from-tag-name: ${{ github.event.inputs.from-tag-name }} chapters: | - - { title: No entry 🚫, label: duplicate } - - { title: Breaking Changes 💥, label: breaking-change } - - { title: New Features 🎉, label: enhancement } - - { title: New Features 🎉, label: feature } - - { title: Bugfixes 🛠, label: bug } - - { title: Infrastructure ⚙️, label: infrastructure } - - { title: Silent-live 🤫, label: silent-live } - - { title: Documentation 📜, label: documentation } + - {"title": "Entries to skip 🚫", "label": "duplicate"} + - {"title": "Entries to skip 🚫", "label": "invalid"} + - {"title": "Entries to skip 🚫", "label": "wontfix"} + - {"title": "Entries to skip 🚫", "label": "no RN"} + - {"title": "Breaking Changes 💥", "label": "breaking change"} + - {"title": "Security updates 👮", "label": "security"} + - {"title": "New Features 🎉", "label": "enhancement"} + - {"title": "Bugfixes 🛠", "label": "bug"} + - {"title": "Epics 📖", "label": "epic"} + - {"title": "Infrastructure ⚙️", "label": "infrastructure"} + - {"title": "Silent-live 🤫", "label": "silent live"} + - {"title": "Documentation 📜", "label": "documentation"} + duplicity-scope: 'none' warnings: true + skip-release-notes-labels: "no RN,duplicate,invalid,wontfix" + print-empty-chapters: false + row-format-issue: '_{title}_ {developers} in {number}' + row-format-pr: '_{title}_ {developers} in {number}' + row-format-link-pr: true + hierarchy: true - name: Create and Push Tag - uses: actions/github-script@v7 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd + env: + TAG_NAME: ${{ github.event.inputs.tag-name }} with: script: | - const tag = core.getInput('tag-name') + const tag = process.env.TAG_NAME const ref = `refs/tags/${tag}`; const sha = context.sha; // The SHA of the commit to tag @@ -78,10 +107,9 @@ jobs: console.log(`Tag created: ${tag}`); github-token: ${{ secrets.GITHUB_TOKEN }} - tag-name: ${{ github.event.inputs.tag-name }} - name: Create Draft Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: