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
2 changes: 0 additions & 2 deletions .github/scripts/audit-urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@
# Only files that perform outbound binary downloads.
# Adding a new download path outside these files requires a conscious update here.
SCAN_FILES = [
"lynx/agent/src/update/mod.rs",
"lynx/agent/src/update/fallback.rs",
"lynx/dashboard/server/src/update.rs",
"lynx/dashboard/server/src/scheduler.rs",
]
Expand Down
50 changes: 32 additions & 18 deletions .github/workflows/dashboard-server.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
components: rustfmt
- name: Install toolchain
run: |
rustup toolchain install stable --profile minimal --component rustfmt
rustup default stable

- name: fmt
run: cargo fmt --package lynx-dashboard-server -- --check
Expand All @@ -61,9 +61,10 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
- name: Install toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable

- name: Install cargo-audit
run: cargo install cargo-audit --locked
Expand Down Expand Up @@ -94,14 +95,20 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
components: clippy
- name: Install toolchain
run: |
rustup toolchain install stable --profile minimal --component clippy
rustup default stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
workspaces: lynx
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
lynx/target
key: rust-${{ github.job }}-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: rust-${{ github.job }}-${{ runner.os }}-

- name: Install sqlx-cli
run: cargo install sqlx-cli --no-default-features --features postgres --locked
Expand Down Expand Up @@ -147,13 +154,20 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
- name: Install toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
workspaces: lynx
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
lynx/target
key: rust-${{ github.job }}-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: rust-${{ github.job }}-${{ runner.os }}-

- name: Install sqlx-cli
run: cargo install sqlx-cli --no-default-features --features postgres --locked
Expand Down
28 changes: 16 additions & 12 deletions .github/workflows/dashboard-ui.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest
- name: Install bun
run: |
curl -fsSL https://bun.sh/install | bash
echo "$HOME/.bun/bin" >> "$GITHUB_PATH"

- name: Install dependencies
run: bun install --frozen-lockfile
Expand All @@ -45,9 +46,10 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest
- name: Install bun
run: |
curl -fsSL https://bun.sh/install | bash
echo "$HOME/.bun/bin" >> "$GITHUB_PATH"

- name: Install dependencies
run: bun install --frozen-lockfile
Expand All @@ -64,9 +66,10 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest
- name: Install bun
run: |
curl -fsSL https://bun.sh/install | bash
echo "$HOME/.bun/bin" >> "$GITHUB_PATH"

- name: Install dependencies
run: bun install --frozen-lockfile
Expand All @@ -83,9 +86,10 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest
- name: Install bun
run: |
curl -fsSL https://bun.sh/install | bash
echo "$HOME/.bun/bin" >> "$GITHUB_PATH"

- name: Install dependencies
run: bun install --frozen-lockfile
Expand Down
87 changes: 45 additions & 42 deletions .github/workflows/release-dashboard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,20 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
- name: Install toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
workspaces: lynx
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
lynx/target
key: rust-${{ github.job }}-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: rust-${{ github.job }}-${{ runner.os }}-

- name: Install sqlx-cli
run: cargo install sqlx-cli --no-default-features --features postgres --locked
Expand Down Expand Up @@ -103,14 +110,20 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
components: rustfmt, clippy
- name: Install toolchain
run: |
rustup toolchain install stable --profile minimal --component rustfmt,clippy
rustup default stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
workspaces: lynx
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
lynx/target
key: rust-${{ github.job }}-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: rust-${{ github.job }}-${{ runner.os }}-

- name: Install sqlx-cli
run: cargo install sqlx-cli --no-default-features --features postgres --locked
Expand Down Expand Up @@ -144,9 +157,10 @@ jobs:
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest
- name: Install bun
run: |
curl -fsSL https://bun.sh/install | bash
echo "$HOME/.bun/bin" >> "$GITHUB_PATH"

- name: Install dependencies
run: bun install --frozen-lockfile
Expand Down Expand Up @@ -188,14 +202,21 @@ jobs:

# --- Rust backend -------------------------------------------------------

- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # stable
with:
toolchain: stable
targets: ${{ matrix.rust-target }}
- name: Install toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable
rustup target add ${{ matrix.rust-target }}

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
workspaces: lynx
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
lynx/target
key: rust-${{ github.job }}-${{ matrix.arch }}-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: rust-${{ github.job }}-${{ matrix.arch }}-${{ runner.os }}-

- name: Install musl toolchain (x86_64)
if: ${{ !matrix.use_cross }}
Expand All @@ -217,12 +238,10 @@ jobs:
if [ "${{ matrix.use_cross }}" = "true" ]; then
cross build --release \
--package lynx-dashboard-server \
--package lynx-compose \
--target ${{ matrix.rust-target }}
else
cargo build --release \
--package lynx-dashboard-server \
--package lynx-compose \
--target ${{ matrix.rust-target }}
fi
env:
Expand All @@ -239,22 +258,12 @@ jobs:
cp "$BINARY" "$ARTIFACT"
python3 .github/scripts/sign.py "$RELEASE_SIGN_KEY" "$ARTIFACT"

- name: Sign lynx-compose binary
working-directory: ${{ github.workspace }}
env:
RELEASE_SIGN_KEY: ${{ secrets.RELEASE_SIGN_KEY }}
run: |
BINARY="lynx/target/${{ matrix.rust-target }}/release/lynx-compose"
ARTIFACT="lynx-compose-linux-${{ matrix.arch }}"
cp "$BINARY" "$ARTIFACT"
python3 .github/scripts/sign.py "$RELEASE_SIGN_KEY" "$ARTIFACT"

# --- Frontend -----------------------------------------------------------

- name: Install bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: latest
run: |
curl -fsSL https://bun.sh/install | bash
echo "$HOME/.bun/bin" >> "$GITHUB_PATH"

- name: Install frontend deps
working-directory: lynx/dashboard/ui
Expand Down Expand Up @@ -338,8 +347,6 @@ jobs:
lynx-dashboard-frontend-linux-${{ matrix.arch }}.sig
lynx-dashboard-frontend-assets-linux-${{ matrix.arch }}.tar.gz
lynx-dashboard-frontend-assets-linux-${{ matrix.arch }}.tar.gz.sig
lynx-compose-linux-${{ matrix.arch }}
lynx-compose-linux-${{ matrix.arch }}.sig
retention-days: 1

release:
Expand Down Expand Up @@ -372,8 +379,4 @@ jobs:
lynx-dashboard-frontend-linux-arm64 \
lynx-dashboard-frontend-linux-arm64.sig \
"lynx-dashboard-frontend-assets-linux-arm64.tar.gz" \
"lynx-dashboard-frontend-assets-linux-arm64.tar.gz.sig" \
lynx-compose-linux-x86_64 \
lynx-compose-linux-x86_64.sig \
lynx-compose-linux-arm64 \
lynx-compose-linux-arm64.sig
"lynx-dashboard-frontend-assets-linux-arm64.tar.gz.sig"
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@

<br />

[![CI — Agent](https://github.com/Jaro-c/Lynx/actions/workflows/agent.yml/badge.svg)](https://github.com/Jaro-c/Lynx/actions/workflows/agent.yml)
[![CI — Dashboard](https://github.com/Jaro-c/Lynx/actions/workflows/dashboard-server.yml/badge.svg)](https://github.com/Jaro-c/Lynx/actions/workflows/dashboard-server.yml)
[![CI — Dashboard](https://github.com/Glyndor/panel/actions/workflows/dashboard-server.yml/badge.svg)](https://github.com/Glyndor/panel/actions/workflows/dashboard-server.yml)
![Rust](https://img.shields.io/badge/Agent-Rust-orange?logo=rust)
![Next.js](https://img.shields.io/badge/Dashboard-Next.js-black?logo=next.js)

Expand Down Expand Up @@ -204,7 +203,7 @@ bun dev

The agent and the compose translator live in
[panel-agent](https://github.com/Glyndor/panel-agent) and
[podman-compose](https://github.com/Glyndor/podman-compose).
[podup](https://github.com/Glyndor/podup).

<details>
<summary><strong>VM test matrix</strong></summary>
Expand Down
18 changes: 9 additions & 9 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@
<div class="max-w-6xl mx-auto px-6 h-16 flex items-center justify-between">
<span class="text-yellow-400 font-mono font-semibold text-lg tracking-tight">⬡ LYNX</span>
<div class="flex items-center gap-6">
<a href="https://github.com/Jaro-c/Lynx" class="text-sm text-gray-400 hover:text-white transition-colors">GitHub</a>
<a href="https://github.com/Jaro-c/Lynx/releases" class="text-sm text-gray-400 hover:text-white transition-colors">Releases</a>
<a href="https://github.com/Jaro-c/Lynx" class="text-sm bg-yellow-500/10 text-yellow-400 border border-yellow-500/20 px-4 py-1.5 rounded-full hover:bg-yellow-500/20 transition-colors font-mono">
<a href="https://github.com/Glyndor/panel" class="text-sm text-gray-400 hover:text-white transition-colors">GitHub</a>
<a href="https://github.com/Glyndor/panel/releases" class="text-sm text-gray-400 hover:text-white transition-colors">Releases</a>
<a href="https://github.com/Glyndor/panel" class="text-sm bg-yellow-500/10 text-yellow-400 border border-yellow-500/20 px-4 py-1.5 rounded-full hover:bg-yellow-500/20 transition-colors font-mono">
v1.0.0
</a>
</div>
Expand Down Expand Up @@ -108,13 +108,13 @@ <h1 class="text-6xl md:text-7xl font-bold mb-6 fade-up delay-1 leading-tight">
</p>

<div class="flex flex-col sm:flex-row items-center justify-center gap-4 fade-up delay-3">
<a href="https://github.com/Jaro-c/Lynx" class="flex items-center gap-2 bg-yellow-500 hover:bg-yellow-400 text-black font-semibold px-6 py-3 rounded-lg transition-colors">
<a href="https://github.com/Glyndor/panel" class="flex items-center gap-2 bg-yellow-500 hover:bg-yellow-400 text-black font-semibold px-6 py-3 rounded-lg transition-colors">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"/>
</svg>
View on GitHub
</a>
<a href="https://github.com/Jaro-c/Lynx/releases" class="flex items-center gap-2 border border-white/10 hover:border-white/20 text-white px-6 py-3 rounded-lg transition-colors">
<a href="https://github.com/Glyndor/panel/releases" class="flex items-center gap-2 border border-white/10 hover:border-white/20 text-white px-6 py-3 rounded-lg transition-colors">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M9 19l3 3m0 0l3-3m-3 3V10"/>
</svg>
Expand Down Expand Up @@ -235,7 +235,7 @@ <h2 class="text-4xl font-bold mb-4">Up and running in minutes.</h2>
<h3 class="font-semibold text-white mb-2">Install the dashboard</h3>
<p class="text-gray-400 text-sm mb-3">Run the install script on your VPS. PostgreSQL, Redis, WireGuard, and all components configured automatically with secure random secrets.</p>
<div class="code-block rounded-lg px-4 py-3 font-mono text-sm">
<span class="text-gray-500">$</span> <span class="text-yellow-400">curl</span> <span class="text-gray-300">-sSL https://github.com/Jaro-c/Lynx/releases/latest/download/install-dashboard.sh | bash</span>
<span class="text-gray-500">$</span> <span class="text-yellow-400">curl</span> <span class="text-gray-300">-sSL https://raw.githubusercontent.com/Glyndor/panel/main/install.sh | sudo bash</span>
</div>
</div>
</div>
Expand All @@ -246,7 +246,7 @@ <h3 class="font-semibold text-white mb-2">Install the dashboard</h3>
<h3 class="font-semibold text-white mb-2">Connect remote VPS nodes</h3>
<p class="text-gray-400 text-sm mb-3">Generate WireGuard keys in the dashboard UI. Run the agent install script on each remote VPS — it asks for those keys and sets up the encrypted tunnel automatically.</p>
<div class="code-block rounded-lg px-4 py-3 font-mono text-sm">
<span class="text-gray-500">$</span> <span class="text-yellow-400">curl</span> <span class="text-gray-300">-sSL https://github.com/Jaro-c/Lynx/releases/latest/download/install-agent.sh | bash</span>
<span class="text-gray-500">$</span> <span class="text-yellow-400">curl</span> <span class="text-gray-300">-sSL https://raw.githubusercontent.com/Glyndor/panel/main/install.sh | sudo bash</span>
</div>
</div>
</div>
Expand Down Expand Up @@ -287,7 +287,7 @@ <h3 class="font-semibold text-white mb-2">Deploy and manage</h3>
<div class="border border-yellow-500/20 rounded-2xl p-12 bg-yellow-500/4 glow-amber">
<h2 class="text-3xl font-bold mb-4">Own your infrastructure.</h2>
<p class="text-gray-400 mb-8 leading-relaxed">No cloud accounts. No vendor lock-in. No monthly subscriptions.<br>Just your servers, under your control.</p>
<a href="https://github.com/Jaro-c/Lynx" class="inline-flex items-center gap-2 bg-yellow-500 hover:bg-yellow-400 text-black font-semibold px-8 py-3 rounded-lg transition-colors">
<a href="https://github.com/Glyndor/panel" class="inline-flex items-center gap-2 bg-yellow-500 hover:bg-yellow-400 text-black font-semibold px-8 py-3 rounded-lg transition-colors">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"/>
</svg>
Expand All @@ -304,7 +304,7 @@ <h2 class="text-3xl font-bold mb-4">Own your infrastructure.</h2>
<p class="text-gray-500 text-sm">
Made with ❤️ by <a href="https://github.com/Jaro-c" class="text-gray-400 hover:text-white transition-colors">Jaroc</a>
·
<a href="https://github.com/Jaro-c/Lynx" class="text-gray-400 hover:text-white transition-colors">Open source on GitHub</a>
<a href="https://github.com/Glyndor/panel" class="text-gray-400 hover:text-white transition-colors">Open source on GitHub</a>
</p>
</div>
</footer>
Expand Down
2 changes: 1 addition & 1 deletion docs/security-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,5 @@ release is published and deployed automatically.
| Component | Support |
|-----------|---------|
| `dashboard@latest` | ✅ Supported |
| `agent@latest` ([panel-agent](https://github.com/Glyndor/panel-agent)) | ✅ Supported |
| `panel-agent` latest ([releases](https://github.com/Glyndor/panel-agent/releases)) | ✅ Supported |
| Older versions | ❌ No patches — update via auto-update |
Loading
Loading