Skip to content

Commit b4017b5

Browse files
committed
Merge branch 'master' of https://github.com/raghavyuva/nixopus
2 parents 22c67de + 750c234 commit b4017b5

38 files changed

+2007
-193
lines changed

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name: Bug report
33
about: Create a report to help us improve
44
title: ''
5-
labels: ''
5+
labels: bug
66
assignees: ''
77

88
---

.github/ISSUE_TEMPLATE/feature_request.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name: Feature request
33
about: Suggest an idea for this project
44
title: ''
5-
labels: ''
5+
labels: enhancement
66
assignees: ''
77

88
---

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
# [0.1.0-alpha.56](https://github.com/raghavyuva/nixopus/compare/v0.1.0-alpha.55...v0.1.0-alpha.56) (2025-10-30)
2+
3+
4+
### Features
5+
6+
* add extension templates for gotify, n8n, netdata, qdrant, and more ([#545](https://github.com/raghavyuva/nixopus/issues/545)) ([ecb332c](https://github.com/raghavyuva/nixopus/commit/ecb332c51b0f99beff625856f2ff7a7ec4e9d33c))
7+
8+
9+
10+
# [0.1.0-alpha.55](https://github.com/raghavyuva/nixopus/compare/v0.1.0-alpha.54...v0.1.0-alpha.55) (2025-10-29)
11+
12+
13+
### Bug Fixes
14+
15+
* make domain validation less restrictive for extension deployments ([#543](https://github.com/raghavyuva/nixopus/issues/543)) ([72cc971](https://github.com/raghavyuva/nixopus/commit/72cc971f0f8df0897c60b31379090248ec771f74))
16+
17+
18+
119
# [0.1.0-alpha.54](https://github.com/raghavyuva/nixopus/compare/v0.1.0-alpha.53...v0.1.0-alpha.54) (2025-10-28)
220

321

README.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
<a href="https://nixopus.com"><img width="1800" height="520" alt="Heading(4)" src="https://github.com/user-attachments/assets/e103a9df-7abf-4f78-b75a-221331231247" /></a>
33
</div>
44

5-
65
<p align="center">
7-
Open Source alternative to vercel, heroku, netlify with Terminal integration, and Self Hosting capabilities.
6+
Open Source alternative to vercel, heroku, netlify with Terminal integration, and Self Hosting capabilities.
87
</p>
98

109
<p align="center">
@@ -15,8 +14,7 @@
1514
<a href="https://github.com/raghavyuva/nixopus/discussions/262"><b>Roadmap</b></a>
1615
</p>
1716

18-
<img width="1210" height="764" alt="image" src="https://github.com/user-attachments/assets/3f1dc1e0-956d-4785-8745-ed59d0390afd" />
19-
17+
<img width="1210" height="764" alt="image" src="assets/nixopus_dashboard.png" />
2018

2119
> ⚠️ **Important Note**: Nixopus is currently in alpha/pre-release stage and is not yet ready for production use. While you're welcome to try it out, we recommend waiting for the beta or stable release before using it in production environments. The platform is still undergoing testing and development.
2220
@@ -35,9 +33,10 @@
3533

3634
This section will help you set up Nixopus on your VPS quickly.
3735

38-
### Install Nixopus:
36+
### Install Nixopus
3937

4038
**To get started without domain names, and to try out over ip:port deployment:**
39+
4140
```bash
4241
curl -sSL https://install.nixopus.com | bash
4342
```
@@ -81,4 +80,3 @@ Nixopus is derived from the combination of "octopus" and the Linux penguin (Tux)
8180
<a href="https://github.com/raghavyuva/nixopus/graphs/contributors">
8281
<img src="https://contrib.rocks/image?repo=raghavyuva/nixopus" alt="Nixopus project contributors" />
8382
</a>
84-

api/api/versions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{
44
"version": "v1",
55
"status": "active",
6-
"release_date": "2025-10-28T22:04:41.913593+05:30",
6+
"release_date": "2025-10-30T23:05:56.030438+05:30",
77
"end_of_life": "0001-01-01T00:00:00Z",
88
"changes": [
99
"Initial API version"

api/doc/openapi.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

api/internal/features/dashboard/system_stats.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ func formatBytes(bytes uint64, unit string) string {
3535
// TODO: Add support for multi server management
3636
// solution: create a bridge between the gopsutil and the ssh client
3737
func (m *DashboardMonitor) GetSystemStats() {
38+
// Check if context is cancelled before proceeding
39+
select {
40+
case <-m.ctx.Done():
41+
return
42+
default:
43+
}
44+
3845
osType, err := m.getCommandOutput("uname -s")
3946
if err != nil {
4047
m.BroadcastError(err.Error(), GetSystemStats)
@@ -225,6 +232,10 @@ func (m *DashboardMonitor) getNetworkStats() NetworkStats {
225232
}
226233

227234
func (m *DashboardMonitor) getCommandOutput(cmd string) (string, error) {
235+
if m.client == nil {
236+
return "", fmt.Errorf("SSH client is not connected")
237+
}
238+
228239
session, err := m.client.NewSession()
229240
if err != nil {
230241
m.log.Log(logger.Error, "Failed to create new session", err.Error())

api/internal/features/extension/controller/run_extension.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ func (c *ExtensionsController) CancelExecution(ctx fuego.ContextNoBody) (*types.
5252
}
5353

5454
type ListLogsResponse struct {
55-
Logs []types.ExtensionLog `json:"logs"`
56-
NextAfter int64 `json:"next_after"`
55+
Logs []types.ExtensionLog `json:"logs"`
56+
NextAfter int64 `json:"next_after"`
57+
ExecutionStatus *types.ExecutionStatus `json:"execution_status,omitempty"`
5758
}
5859

5960
func (c *ExtensionsController) ListExecutionLogs(ctx fuego.ContextNoBody) (*ListLogsResponse, error) {
@@ -73,7 +74,7 @@ func (c *ExtensionsController) ListExecutionLogs(ctx fuego.ContextNoBody) (*List
7374
limit = parsed
7475
}
7576
}
76-
logs, err := c.service.ListExecutionLogs(execID, afterSeq, limit)
77+
logs, execStatus, err := c.service.ListExecutionLogs(execID, afterSeq, limit)
7778
if err != nil {
7879
c.logger.Log(logger.Error, err.Error(), "")
7980
return nil, fuego.HTTPError{Err: err, Status: http.StatusInternalServerError}
@@ -82,5 +83,9 @@ func (c *ExtensionsController) ListExecutionLogs(ctx fuego.ContextNoBody) (*List
8283
if len(logs) > 0 {
8384
next = logs[len(logs)-1].Sequence
8485
}
85-
return &ListLogsResponse{Logs: logs, NextAfter: next}, nil
86+
return &ListLogsResponse{
87+
Logs: logs,
88+
NextAfter: next,
89+
ExecutionStatus: execStatus,
90+
}, nil
8691
}

api/internal/features/extension/engine/proxy.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,23 @@ func (proxyModule) Execute(sshClient *ssh.SSH, step types.SpecStep, vars map[str
5757
switch action {
5858
case "add":
5959
if domain == "" || port == "" {
60-
return "", nil, fmt.Errorf("domain and port are required")
60+
return "proxy step skipped: domain and port are optional", nil, nil
6161
}
6262
if err := AddDomainToProxy(domain, port); err != nil {
6363
return "", nil, err
6464
}
6565
return fmt.Sprintf("proxy added for %s -> %s:%s", domain, config.AppConfig.SSH.Host, port), nil, nil
6666
case "update":
6767
if domain == "" || port == "" {
68-
return "", nil, fmt.Errorf("domain and port are required")
68+
return "proxy step skipped: domain and port are optional", nil, nil
6969
}
7070
if err := UpdateDomainInProxy(domain, port); err != nil {
7171
return "", nil, err
7272
}
7373
return fmt.Sprintf("proxy updated for %s -> %s:%s", domain, config.AppConfig.SSH.Host, port), nil, nil
7474
case "remove":
7575
if domain == "" {
76-
return "", nil, fmt.Errorf("domain is required")
76+
return "proxy step skipped: domain is optional", nil, nil
7777
}
7878
if err := RemoveDomainFromProxy(domain); err != nil {
7979
return "", nil, err

api/internal/features/extension/parser/validate.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,8 @@ func (p *Parser) validateProxyStep(step ExecutionStep) error {
156156
}
157157
action, _ := step.Properties["action"].(string)
158158
switch action {
159-
case "add", "update":
160-
return p.requireProps(step, map[string]bool{"domain": true, "port": true})
161-
case "remove":
162-
return p.requireProps(step, map[string]bool{"domain": true})
159+
case "add", "update", "remove":
160+
return nil
163161
default:
164162
return fmt.Errorf("unsupported proxy action: %s", action)
165163
}

0 commit comments

Comments
 (0)