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
40 changes: 40 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Bug report
description: Report a problem with Teebot Flow
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report an issue.
- type: input
id: summary
attributes:
label: Summary
description: Short description of the bug
placeholder: "Example: Delivery challan creation fails for archived customers"
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
placeholder: 1. Open the app
description: List the steps needed to reproduce the issue.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual behavior
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
placeholder: OS, version, build channel, etc.
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 report
url: https://github.com/iTeebot/flow/security/advisories/new
about: Report security vulnerabilities privately via GitHub's advisory form before using public channels.
- name: Questions and discussion
url: https://github.com/teebot/teebot-flow/discussions
about: Ask questions or discuss the project with the community.
30 changes: 30 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Feature request
description: Suggest an idea for Teebot Flow
body:
- type: markdown
attributes:
value: |
Thanks for suggesting a feature.
- type: input
id: summary
attributes:
label: Feature summary
placeholder: "Example: Add bulk invoice export"
validations:
required: true
- type: textarea
id: problem
attributes:
label: Problem to solve
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
18 changes: 18 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## Summary

Describe the change you made and why it matters.

## Related issue

- Fixes #

## What changed

- Bullet list of the main updates
- Mention any docs or tests updated

## Verification

- [ ] Local build or checks were run
- [ ] Manual testing completed
- [ ] Documentation updated if needed
32 changes: 32 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,36 @@ jobs:
- name: Run backend tests
run: cargo test --manifest-path src-tauri/Cargo.toml

desktop-build:
name: Desktop Build Check
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
Comment thread
coderabbitai[bot] marked this conversation as resolved.
with:
persist-credentials: false

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'pnpm'

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Setup Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1

- name: Install system dependencies (Linux)
uses: ./.github/actions/install-dependencies

- name: Build Desktop App
run: pnpm tauri build --no-bundle


127 changes: 120 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,20 @@ concurrency:
group: release-${{ github.ref }}
cancel-in-progress: true



jobs:
# ---------------------------------------------------------------------------
# Web – Vercel production deploy
# ---------------------------------------------------------------------------
deploy-web-release:
name: Deploy Release Web App to Vercel
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false

- name: Setup pnpm
uses: pnpm/action-setup@v4
Expand Down Expand Up @@ -63,30 +68,44 @@ jobs:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

# ---------------------------------------------------------------------------
# Desktop – Windows, macOS, Linux (AppImage / deb / rpm)
# tauri.conf.json has targets:"all" so every platform gets its native formats.
# ---------------------------------------------------------------------------
release-desktop:
name: Build Desktop Release
name: Build Desktop Release (${{ matrix.target }})
runs-on: ${{ matrix.platform }}
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest'
target: 'x86_64-apple-darwin'
args: '--target x86_64-apple-darwin'
# macOS Apple Silicon
- platform: 'macos-latest'
target: 'aarch64-apple-darwin'
args: '--target aarch64-apple-darwin'

# macOS Intel
- platform: 'macos-latest'
target: 'x86_64-apple-darwin'
args: '--target x86_64-apple-darwin'

# Linux – AppImage, deb, rpm (all via targets:"all" in tauri.conf.json)
- platform: 'ubuntu-22.04'
target: 'x86_64-unknown-linux-gnu'
args: ''

# Windows – NSIS installer (nsis config in tauri.conf.json)
- platform: 'windows-latest'
target: 'x86_64-pc-windows-msvc'
args: ''
runs-on: ${{ matrix.platform }}

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false

- name: Setup pnpm
uses: pnpm/action-setup@v4
Expand Down Expand Up @@ -131,3 +150,97 @@ jobs:
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}

# ---------------------------------------------------------------------------
# Linux Snap – separate job because snapcraft needs its own environment.
# Ubuntu 22.04 runners ship snapd but the snap daemon is not socket-active
# in the CI sandbox; snapcraft uses its own LXD / multipass build backend
# which is why this runs on ubuntu-22.04 with snapcraft installed manually.
# ---------------------------------------------------------------------------
release-linux-snap:
name: Build Desktop Release (Linux snap)
runs-on: ubuntu-22.04
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'

- name: Update Version Code
shell: bash
run: |
if [[ ! "$GITHUB_REF_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Error: GITHUB_REF_NAME '$GITHUB_REF_NAME' is not a stable vMAJOR.MINOR.PATCH tag. Skipping snap release."
exit 1
fi
VERSION=${GITHUB_REF_NAME#v}
node scripts/update-version.cjs "$VERSION"
Comment thread
coderabbitai[bot] marked this conversation as resolved.

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Setup Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache: false

- name: Install system dependencies (Linux)
uses: ./.github/actions/install-dependencies

- name: Install snapcraft
run: sudo snap install snapcraft --classic

- name: Build Debian Package via Tauri
run: pnpm tauri build --bundles deb

- name: Stage deb for Snapcraft
run: |
mkdir -p build
DEB_FILE=$(find src-tauri/target/release/bundle/deb -name "*.deb" | head -1)
if [ -z "$DEB_FILE" ]; then
echo "Error: no .deb file found after tauri build"
exit 1
fi
cp "$DEB_FILE" build/teebot-flow.deb
echo "Staged $DEB_FILE → build/teebot-flow.deb"

- name: Build Snap from Debian Package
run: snapcraft --destructive-mode

- name: Upload Snap to GitHub Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ github.ref_name }}
run: |
SNAP_FILE=$(find . -maxdepth 1 -name "*.snap" | head -1)
if [ -z "$SNAP_FILE" ]; then
echo "Warning: no .snap file found, skipping GitHub Release upload"
exit 0
fi
echo "Uploading $SNAP_FILE to GitHub Release $RELEASE_TAG..."
gh release upload "$RELEASE_TAG" "$SNAP_FILE" --clobber || \
echo "Release may not exist yet (created by desktop job). Snap will be uploaded by Snap Store step."

- name: Publish Snap to Snap Store
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
run: |
# snapcraft --destructive-mode produces the .snap in the project root
SNAP_FILE=$(find . -maxdepth 1 -name "*.snap" | head -1)
if [ -z "$SNAP_FILE" ]; then
echo "Error: no .snap file found after build"
exit 1
fi
echo "Uploading $SNAP_FILE to Snap Store (stable channel)..."
snapcraft upload "$SNAP_FILE" --release=stable

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,6 @@ dist-ssr
/public/releases/linux
/public/releases/win
releases/
credentials.txt
build/
*.snap
36 changes: 36 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.0.5] - 2026-07-12

### Added

- Inventory management
- Customer management
- Delivery Challan system
- Dashboard KPIs
- PDF export
- Multi-language support (English/Urdu)
- Dark/Light theme
- User authentication with bcrypt
- Encrypted backup/restore
- Company profile management
- Quotation management
- Invoice management
- Analytics dashboard
- Audit logging
- Multi-user support

### Changed

- Nothing

### Fixed

- Nothing
41 changes: 41 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Contributor Covenant Code of Conduct

## Our pledge

We pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, and inclusive community.

## Our standards

Examples of behavior that contributes to a positive environment include:

- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive feedback
- Focusing on what is best for the community
- Showing empathy toward other community members

Examples of unacceptable behavior include:

- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information without explicit permission
- Any other conduct that could reasonably be considered inappropriate in a professional setting

## Enforcement responsibilities

Project maintainers are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

## Scope

This Code of Conduct applies within all project spaces and in public spaces when an individual is representing the project or its community.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project maintainers via the repository’s contact channels. All complaints will be reviewed and investigated promptly and fairly.

## Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
Loading
Loading