Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.lua]
indent_style = space
indent_size = 4

[*.{yml,yaml}]
indent_style = space
indent_size = 2

[*.md]
trim_trailing_whitespace = false
17 changes: 17 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
* text=auto eol=lf

*.lua text eol=lf
*.xml text eol=lf
*.toc text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf

*.png binary
*.jpg binary
*.jpeg binary
*.tga binary
*.ttf binary
*.ogg binary
*.mp3 binary
*.zip binary
7 changes: 7 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Require the maintainer to review sensitive project files.
* @Roburmaster

/.github/ @Roburmaster
/LICENSE @Roburmaster
/OpenHeal/LICENSE @Roburmaster
/OpenHeal/OpenHeal.toc @Roburmaster
82 changes: 82 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Bug report
description: Report a reproducible OpenHeal problem
title: "[Bug]: "
labels:
- bug
body:
- type: markdown
attributes:
value: |
Thank you for reporting a problem. Do not include account details or private SavedVariables.
- type: input
id: version
attributes:
label: OpenHeal version
description: Release version or commit SHA.
placeholder: v1.0.0
validations:
required: true
- type: input
id: wow-version
attributes:
label: World of Warcraft version
placeholder: Retail client version/build
validations:
required: true
- type: input
id: character
attributes:
label: Class and specialization
placeholder: Restoration Druid
validations:
required: true
- type: textarea
id: description
attributes:
label: Problem
description: Describe what happened and what you expected.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction steps
placeholder: |
1. Log in...
2. Open...
3. Enter combat...
validations:
required: true
- type: textarea
id: lua-error
attributes:
label: First Lua error
description: Paste the complete first error and stack trace. Use a code block.
render: text
- type: dropdown
id: combat
attributes:
label: Combat state
options:
- Out of combat
- In combat
- Both
- Not applicable
validations:
required: true
- type: textarea
id: addons
attributes:
label: Other addons and isolation test
description: State whether the problem remains with other addons disabled.
- type: checkboxes
id: checks
attributes:
label: Checklist
options:
- label: I tested the latest published OpenHeal release.
required: true
- label: I removed private or identifying information.
required: true
- label: This is not a security vulnerability.
required: true
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Security vulnerability
url: https://github.com/Roburmaster/OpenHeal/security/advisories/new
about: Report security problems privately. Do not open a public issue.
- name: Support policy
url: https://github.com/Roburmaster/OpenHeal/blob/main/README.md#reporting-problems
about: Read the diagnostic requirements before reporting a problem.
38 changes: 38 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Feature request
description: Propose a focused improvement to OpenHeal
title: "[Feature]: "
labels:
- enhancement
body:
- type: textarea
id: problem
attributes:
label: Problem to solve
description: Explain the healer workflow or limitation. Avoid describing only a preferred implementation.
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed behavior
description: Describe how the feature should behave in and out of combat.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
- type: textarea
id: risks
attributes:
label: WoW API, secure-frame, or compatibility concerns
description: Include any known combat-lockdown, taint, performance, or SavedVariables implications.
- type: checkboxes
id: checks
attributes:
label: Checklist
options:
- label: I searched existing issues and pull requests.
required: true
- label: This request is specific to OpenHeal rather than general game support.
required: true
23 changes: 23 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Summary

Describe the problem and the solution.

## Testing

- [ ] Tested in the current World of Warcraft Retail client
- [ ] Addon loads without new Lua errors
- [ ] Affected behavior was tested out of combat
- [ ] Affected behavior was tested in combat, when applicable
- [ ] Existing and fresh SavedVariables were considered

## Safety and licensing

- [ ] No private data, account information, or personal SavedVariables are included
- [ ] No telemetry, analytics, or external data transmission was added without prior approval
- [ ] Secure-frame and combat-lockdown implications were reviewed
- [ ] Third-party material is GPL-3.0-compatible and retains required notices
- [ ] I have the right to submit all included code and assets under GPL-3.0-only

## User-visible changes

Describe documentation or changelog updates, or explain why none are needed.
41 changes: 41 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Package release

on:
push:
tags:
- 'v*.*.*'

permissions:
contents: write

jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262

- name: Validate tag and package addon
shell: bash
run: |
set -euo pipefail
VERSION="${GITHUB_REF_NAME#v}"
test -f OpenHeal/OpenHeal.toc
test -f OpenHeal/LICENSE
grep -q "GNU GENERAL PUBLIC LICENSE" OpenHeal/LICENSE
zip -r "OpenHeal-${VERSION}.zip" OpenHeal \
-x '*/.DS_Store' '*/Thumbs.db' '*.log' '*.tmp'

- name: Create GitHub release
env:
GH_TOKEN: ${{ github.token }}
shell: bash
run: |
set -euo pipefail
VERSION="${GITHUB_REF_NAME#v}"
gh release create "$GITHUB_REF_NAME" \
"OpenHeal-${VERSION}.zip" \
--repo "$GITHUB_REPOSITORY" \
--generate-notes \
--verify-tag \
--title "OpenHeal $GITHUB_REF_NAME"
80 changes: 80 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Validate addon

on:
push:
branches:
- main
pull_request:
branches:
- main

permissions:
contents: read

jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262

- name: Install validators
run: sudo apt-get update && sudo apt-get install --yes lua5.1 libxml2-utils

- name: Validate Lua syntax
shell: bash
run: |
set -euo pipefail
find OpenHeal -type f -name '*.lua' -print0 |
while IFS= read -r -d '' file; do
luac5.1 -p "$file"
done

- name: Validate XML syntax
shell: bash
run: |
set -euo pipefail
find OpenHeal -type f -name '*.xml' -print0 |
while IFS= read -r -d '' file; do
xmllint --noout "$file"
done

- name: Validate repository and TOC references
shell: python
run: |
from pathlib import Path
import sys

root = Path("OpenHeal")
toc = root / "OpenHeal.toc"
required = [Path("LICENSE"), root / "LICENSE", toc]
errors = []

for path in required:
if not path.is_file():
errors.append(f"Missing required file: {path}")

for path in Path(".").rglob("*"):
if not path.is_file() or ".git" in path.parts:
continue
try:
text = path.read_text(encoding="utf-8")
except UnicodeDecodeError:
continue
if "<<<<<<< " in text or "=======\n" in text or ">>>>>>> " in text:
errors.append(f"Possible merge marker in {path}")

if toc.is_file():
for raw_line in toc.read_text(encoding="utf-8-sig").splitlines():
line = raw_line.strip()
if not line or line.startswith("##") or line.startswith("#"):
continue
referenced = root / Path(line.replace("\\", "/"))
if not referenced.is_file():
errors.append(f"TOC references missing file: {line}")

if errors:
print("\n".join(errors), file=sys.stderr)
raise SystemExit(1)

print("Repository structure and TOC references are valid.")
31 changes: 31 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Operating systems and editors
.DS_Store
Thumbs.db
Desktop.ini
.vscode/
.idea/
*.swp
*.swo
*~

# Local development and diagnostics
*.log
*.bak
*.tmp
*.orig
*.patch
*.diff

# Generated release archives
*.zip
release/
dist/

# SavedVariables and user data
WTF/
SavedVariables/
*SavedVariables*.lua

# Lua tooling
.luarocks/
luac.out
35 changes: 35 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Code of Conduct

## Our standards

OpenHeal welcomes constructive participation from users and contributors. Project spaces must remain professional, technically focused, and safe to use.

Expected behavior includes:

- discussing ideas and defects respectfully;
- giving actionable technical feedback;
- accepting correction when evidence contradicts an assumption;
- respecting privacy and confidentiality;
- focusing criticism on code, behavior, and decisions rather than people.

Unacceptable behavior includes:

- harassment, threats, discrimination, or targeted insults;
- sexualized language or unwanted attention;
- publishing another person's private information;
- deliberately disruptive, deceptive, or malicious contributions;
- repeated off-topic arguments after a maintainer has redirected the discussion.

## Enforcement

The repository owner may edit, hide, reject, or remove contributions and may temporarily or permanently restrict participation when behavior is harmful to the project or its participants.

Reports should be sent privately to the repository owner through their GitHub profile. Do not open a public issue containing sensitive personal details.

## Scope

This policy applies to repository issues, pull requests, discussions, reviews, release channels, and other spaces where a person is representing OpenHeal.

## Attribution

This policy is a concise project-specific conduct standard informed by common open-source community practices.
Loading
Loading