Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1e5e5e7
Created AI PRs summarizer agent
technologic-technologic Oct 5, 2025
afaca99
Fine-tuned agent
technologic-technologic Oct 6, 2025
bc89713
Added Search bar
technologic-technologic Oct 8, 2025
5aec6a2
Dependencies vulnerabilities fix
technologic-technologic Oct 15, 2025
d9f5811
Added testing to search bar component
technologic-technologic Oct 15, 2025
568afd1
Updated row checkbox behavior
technologic-technologic Oct 16, 2025
9e27b9f
Modified fallback value for pages
technologic-technologic Oct 16, 2025
786657b
Fix values formatting
technologic-technologic Oct 16, 2025
47a6286
Fix bug in search bar
technologic-technologic Oct 16, 2025
1532cb2
Updated documentation
technologic-technologic Oct 16, 2025
b1c528c
Gen-AI module -> Fixes
technologic-technologic Oct 16, 2025
177bf80
Fix bug in search bar & updated 'preview' script definition
technologic-technologic Oct 16, 2025
7522145
Updated 'preview' script definition
technologic-technologic Oct 16, 2025
e6c5666
Open ticket to enhance code -> Workflows
technologic-technologic Oct 16, 2025
b73eead
Created workflows for latest release
technologic-technologic Oct 16, 2025
66635ae
Added fix to workflows
technologic-technologic Oct 16, 2025
6a18783
Fix pre-release and build workflows
technologic-technologic Oct 16, 2025
e1fdcbb
Removed package-lock from gitignore
technologic-technologic Oct 16, 2025
49697f9
Merge pull request 50 -> 48-fix-all-workflow
technologic-technologic Oct 16, 2025
94cba40
Removed package-lock from gitignore
technologic-technologic Oct 16, 2025
f1bb32c
added dependency path definition in workflows
technologic-technologic Oct 16, 2025
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
159 changes: 159 additions & 0 deletions .github/workflows/ai-pr-summary.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
name: PR AI Summary

on:
pull_request:
types: [opened, synchronize, reopened]

permissions:
contents: read
pull-requests: write

jobs:
summarize:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Get PR diff
id: diff
run: |
BASE="${{ github.event.pull_request.base.sha }}"
HEAD="${{ github.event.pull_request.head.sha }}"
# Trae exactamente esos commits (evita problemas de merge-base y shallow clones)
git fetch --no-tags --prune --depth=1 origin $BASE $HEAD
git diff $BASE $HEAD > pr.diff
echo "path=pr.diff" >> $GITHUB_OUTPUT

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install deps
run: |
python -m pip install --upgrade pip
pip install openai==1.* # SDK oficial

- name: Generate AI summary (OpenAI)
id: ai
continue-on-error: true
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
MODEL: gpt-4o-mini
run: |
python - << 'PY'
import os
from openai import OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

with open("pr.diff","r",encoding="utf-8") as f:
diff = f.read()[:200000] # tope por costos/ruido

prompt = (
"You are a code reviewer. Summarize this PR in 2-20 bullets. "
"Include WHAT changed, WHY it matters, RISKS, TESTS to add, and any BREAKING CHANGES. "
"Highlight key features or changes. Consider markdown as the default output format."
"Keep in mind the following points:"
"1) If DIFF shows only documentation files (e.g., .md/.mdx/.txt/README), state 'Docs-only change', "
" make clear that the change is included only in documentation files, if that is the case, "
" otherwise explain normally, considering the DIFF changes like normal. "
"2) Include a short list of changed file paths as extracted from DIFF. "
"Keep it concise and actionable.\n\nDIFF:\n" + diff
)

resp = client.chat.completions.create(
model=os.getenv("MODEL","gpt-4o-mini"),
temperature=0.2,
messages=[{"role":"user","content":prompt}],
)
text = resp.choices[0].message.content.strip()
with open("summary.txt","w",encoding="utf-8") as f:
f.write(text)
PY

- name: Heuristic fallback if AI failed
if: ${{ steps.ai.outcome == 'failure' }}
run: |
python - << 'PY'
import re, pathlib
diff = pathlib.Path("pr.diff").read_text(encoding="utf-8")

added = len(re.findall(r"^\\+[^+].*$", diff, flags=re.M))
removed = len(re.findall(r"^\\-[^-].*$", diff, flags=re.M))
files = re.findall(r"^\\+\\+\\+ b/(.+)$", diff, flags=re.M)

lower_paths = [f.lower() for f in files]
DOC_EXT = (".md", ".mdx", ".txt", ".rst", ".adoc")
is_doc = lambda p: p.endswith(DOC_EXT) or "/docs/" in p or "/doc/" in p
docs_only = len(files) > 0 and all(is_doc(p) for p in lower_paths)

# ---------- Doc-only summary ----------
if docs_only:
bullets_changed = []
for f in files[:20]: # evita listas enormes
bullets_changed.append(f"- `{f}`")
doc_summary = [
"## PR Summary",
"",
"### WHAT Changed",
"- **Docs-only change** detected from DIFF.",
f"- Files changed ({len(files)}):",
*bullets_changed,
"",
"### WHY It Matters",
"- Improves documentation/README clarity and onboarding experience.",
"",
"### RISKS",
"- None to runtime behavior (documentation only).",
"",
"### TESTS to Add",
"- N/A (no code changes).",
"",
"### BREAKING CHANGES",
"- None.",
]
pathlib.Path("summary.txt").write_text("\n".join(doc_summary), encoding="utf-8")
raise SystemExit(0)

scopes = set()
for f in files:
fl = f.lower()
if "/controller" in fl: scopes.add("controller")
elif "/service" in fl: scopes.add("service")
elif "/repository" in fl or "jparepository" in diff.lower(): scopes.add("repository")
elif "/entity" in fl or "/model" in fl: scopes.add("entity")
elif "application" in fl and (fl.endswith(".yml") or fl.endswith(".yaml") or fl.endswith(".properties")):
scopes.add("config")
elif fl.endswith("test.java"): scopes.add("test")

scope = ",".join(sorted(scopes)) if scopes else "core"
kind = "refactor"
if added and not removed: kind = "feat"
if removed and not added: kind = "chore"
if re.search(r"@Test", diff): kind = "test"
if re.search(r"fix|bug|exception|stacktrace", diff, re.I): kind = "fix"

subject = f"[Fallback] {kind}({scope}): {len(files)} file(s), +{added}/-{removed}"

bullets = []
bullets.append(f"- Files changed: {len(files)}")
bullets.append(f"- Lines: +{added} / -{removed}")
if scopes:
bullets.append(f"- Layers: {', '.join(sorted(scopes))}")
if re.search(r"@Transactional", diff): bullets.append("- Touches transactional boundaries")
if re.search(r"@RestController|@Controller", diff): bullets.append("- Controller changes present")
if re.search(r"@Service", diff): bullets.append("- Service-layer changes present")
if re.search(r"@Repository|JpaRepository", diff): bullets.append("- Repository-layer changes present")
if re.search(r"todo|fixme", diff, re.I): bullets.append("- Contains TODO/FIXME markers")

text = subject + "\\n\\n" + "\\n".join(bullets)
pathlib.Path("summary.txt").write_text(text, encoding="utf-8")
PY

- name: Comment on PR
uses: marocchino/sticky-pull-request-comment@v2
with:
header: ai-pr-summary
recreate: true
path: summary.txt
28 changes: 28 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: build

on:
push:
branches: [ main ]

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: inventory-manager
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: inventory-manager/package-lock.json
- run: npm ci
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: dist
path: dist
33 changes: 33 additions & 0 deletions .github/workflows/pre-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: pre-release

on:
push:
branches: [ stage ]

permissions:
contents: write

jobs:
nightly:
runs-on: ubuntu-latest
defaults:
run:
working-directory: inventory-manager
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: inventory-manager/package-lock.json
- run: npm ci
- run: npm run build
- run: zip -r dist-nightly.zip dist
- uses: ncipollo/release-action@v1
with:
tag: nightly
name: Nightly
prerelease: true
allowUpdates: true
replacesArtifacts: true
artifacts: dist-nightly.zip
32 changes: 11 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
The system allows creating, updating, filtering, and sorting products,
as well as tracking key metrics like total stock, inventory value, and average price.

The project was built with a focus on usability, clear data visualization,
responsiveness and its supposed to be bug free. It supports pagination,
search filters, product availability toggling, and sorting by multiple columns.
The project was built with a focus of usability, clear data visualization and
responsiveness, for an easy convenience store inventory management (and It's supposed to be bug free).
It supports pagination, search filters, product availability toggling, and sorting by multiple columns.

## Tech Stack

Expand All @@ -16,21 +16,7 @@ search filters, product availability toggling, and sorting by multiple columns.
- **Backend:** REST API with CRUD and stock control endpoints
[InventoryManagerBS](https://github.com/technologic-technologic/InventoryManagerBS.git)

## Features

- **Product CRUD**

- **Filtering & Searching**

- **Sorting**

- **Stock Management**

- **Inventory Metrics**

- **Pagination**

## Backend API (Expected)
## Backend API (Expected communications)

Business service git URL: https://github.com/technologic-technologic/InventoryManagerBS.git

Expand All @@ -49,16 +35,20 @@ The frontend expects the following API endpoints:

To run the frontend locally:

```bash
# go to directory from repo location
cd inventory-manager
```
```bash
# Install dependencies
npm install
```
```bash
# Run the app on port 8080
npm start
npm run dev
```

```bash
# Run all tests
npm test
# Run tests manually
npm run test
```
Binary file removed documentation/documentation.docx
Binary file not shown.
44 changes: 24 additions & 20 deletions inventory-manager/.gitignore
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.idea/*
.idea/
.idea/**
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
Loading
Loading