Merge pull request #25 from J3vb/dev

v1.0.0: OwnCord initial release
This commit is contained in:
J3vb
2026-03-19 06:50:28 +01:00
committed by GitHub
343 changed files with 90932 additions and 3046 deletions
+34
View File
@@ -0,0 +1,34 @@
---
name: Bug Report
about: Report a bug in OwnCord
title: "bug: "
labels: bug
---
## Description
<!-- Clear description of the bug -->
## Steps to Reproduce
1.
2.
3.
## Expected Behavior
<!-- What should happen -->
## Actual Behavior
<!-- What actually happens -->
## Environment
- **OS**: Windows 11 (version)
- **OwnCord Version**:
- **Component**: Server / Client / Both
## Screenshots / Logs
<!-- Paste relevant logs or screenshots -->
+22
View File
@@ -0,0 +1,22 @@
---
name: Feature Request
about: Suggest a new feature for OwnCord
title: "feat: "
labels: enhancement
---
## Problem
<!-- What problem does this solve? -->
## Proposed Solution
<!-- How should it work? -->
## Alternatives Considered
<!-- Other approaches you thought about -->
## Additional Context
<!-- Mockups, links, or related issues -->
+27
View File
@@ -0,0 +1,27 @@
# Pull Request
## Summary
<!-- What does this PR do? 1-3 bullet points -->
-
## Changes
<!-- List the key changes made -->
-
## Test Plan
- [ ] Unit tests pass (`npm test` / `go test ./...`)
- [ ] TypeScript check passes (`npx tsc --noEmit`)
- [ ] Manual testing done (describe below)
## Screenshots
<!-- If UI changes, add before/after screenshots -->
## Related Issues
<!-- Link any related issues: Fixes #123, Relates to #456 -->
+54
View File
@@ -0,0 +1,54 @@
version: 2
updates:
# Go server dependencies
- package-ecosystem: gomod
directory: /Server
schedule:
interval: weekly
day: monday
commit-message:
prefix: "chore(deps):"
labels:
- dependencies
- go
open-pull-requests-limit: 10
# Tauri client npm dependencies
- package-ecosystem: npm
directory: /Client/tauri-client
schedule:
interval: weekly
day: monday
commit-message:
prefix: "chore(deps):"
labels:
- dependencies
- npm
open-pull-requests-limit: 10
# Tauri Rust/Cargo dependencies
- package-ecosystem: cargo
directory: /Client/tauri-client/src-tauri
schedule:
interval: weekly
day: monday
commit-message:
prefix: "chore(deps):"
labels:
- dependencies
- rust
open-pull-requests-limit: 5
# GitHub Actions
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
day: monday
commit-message:
prefix: "ci(deps):"
labels:
- dependencies
- ci
open-pull-requests-limit: 5
+110
View File
@@ -0,0 +1,110 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main, dev]
# Cancel in-progress runs for the same branch/PR
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
server-build-test:
name: Server Build & Test
runs-on: windows-latest
defaults:
run:
working-directory: Server/
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.25"
- name: Build server
run: go build -o chatserver.exe -ldflags "-s -w" .
- name: Run tests with coverage
run: go test ./... -coverprofile=coverage.out -cover
- name: Upload Go coverage
if: always()
uses: actions/upload-artifact@v4
with:
name: go-coverage
path: Server/coverage.out
retention-days: 7
- name: Lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.11.3
working-directory: Server/
client-check:
name: Client Typecheck & Test
runs-on: windows-latest
defaults:
run:
working-directory: Client/tauri-client/
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: Client/tauri-client/package-lock.json
- name: Install npm dependencies
run: npm ci
- name: TypeScript check
run: npx tsc --noEmit
- name: Run unit tests with coverage
run: npx vitest run --coverage --reporter=default
- name: Upload client coverage
if: always()
uses: actions/upload-artifact@v4
with:
name: client-coverage
path: Client/tauri-client/coverage/
retention-days: 7
# Full Tauri build only on PRs to main (expensive: ~15 min x2 multiplier)
tauri-build:
name: Tauri Full Build
needs: client-check
if: github.event_name == 'pull_request' && github.base_ref == 'main'
runs-on: windows-latest
defaults:
run:
working-directory: Client/tauri-client/
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: Client/tauri-client/package-lock.json
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: Client/tauri-client/src-tauri
- name: Install npm dependencies
run: npm ci
- name: Build Tauri app
run: npm run tauri build
+107
View File
@@ -0,0 +1,107 @@
name: Release
on:
push:
tags:
- "v*"
jobs:
release:
name: Build & Release
runs-on: windows-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.25"
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: Client/tauri-client/package-lock.json
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: Client/tauri-client/src-tauri
- name: Extract version from tag
shell: bash
run: |
VERSION="${GITHUB_REF_NAME#v}"
echo "VERSION=$VERSION" >> "$GITHUB_ENV"
- name: Build server
shell: bash
run: cd Server && go build -o chatserver.exe -ldflags "-s -w -X main.version=$VERSION" .
- name: Install npm dependencies
working-directory: Client/tauri-client
run: npm ci
- name: Build Tauri app
working-directory: Client/tauri-client
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: npm run tauri build
- name: Locate artifacts
id: artifacts
shell: bash
run: |
NSIS_DIR="Client/tauri-client/src-tauri/target/release/bundle/nsis"
INSTALLER=$(find "$NSIS_DIR" -name "*.exe" | head -1)
echo "installer_path=$INSTALLER" >> "$GITHUB_OUTPUT"
echo "installer_name=$(basename $INSTALLER)" >> "$GITHUB_OUTPUT"
# Updater artifacts (produced when TAURI_SIGNING_PRIVATE_KEY is set)
NSIS_ZIP=$(find "$NSIS_DIR" -name "*_x64-setup.nsis.zip" ! -name "*.sig" | head -1)
NSIS_SIG=$(find "$NSIS_DIR" -name "*_x64-setup.nsis.zip.sig" | head -1)
echo "nsis_zip=${NSIS_ZIP:-}" >> "$GITHUB_OUTPUT"
echo "nsis_sig=${NSIS_SIG:-}" >> "$GITHUB_OUTPUT"
- name: Generate SHA256 checksums
shell: pwsh
run: |
$lines = @()
$serverHash = (Get-FileHash -Path Server/chatserver.exe -Algorithm SHA256).Hash.ToLower()
$lines += "$serverHash chatserver.exe"
$installerPath = "${{ steps.artifacts.outputs.installer_path }}"
$installerName = "${{ steps.artifacts.outputs.installer_name }}"
$clientHash = (Get-FileHash -Path $installerPath -Algorithm SHA256).Hash.ToLower()
$lines += "$clientHash $installerName"
$nsisZip = "${{ steps.artifacts.outputs.nsis_zip }}"
if ($nsisZip -and (Test-Path $nsisZip)) {
$zipName = Split-Path $nsisZip -Leaf
$zipHash = (Get-FileHash -Path $nsisZip -Algorithm SHA256).Hash.ToLower()
$lines += "$zipHash $zipName"
}
$lines -join "`n" | Out-File -FilePath checksums.sha256 -Encoding utf8 -NoNewline
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
ASSETS=(
Server/chatserver.exe
"${{ steps.artifacts.outputs.installer_path }}"
checksums.sha256
)
# Include updater artifacts if signing key was available
if [ -n "${{ steps.artifacts.outputs.nsis_zip }}" ]; then
ASSETS+=("${{ steps.artifacts.outputs.nsis_zip }}")
fi
if [ -n "${{ steps.artifacts.outputs.nsis_sig }}" ]; then
ASSETS+=("${{ steps.artifacts.outputs.nsis_sig }}")
fi
gh release create ${{ github.ref_name }} \
--generate-notes \
"${ASSETS[@]}"