mirror of
https://github.com/biersoeckli/QuickStack.git
synced 2026-02-10 05:29:23 -06:00
feat: enhance versioning in workflows and application
- Updated build-release and canary-release workflows to include version arguments. - Modified Dockerfile to set QS_VERSION environment variable. - Added method to retrieve current QuickStack version in the service. - Passed current version to QuickStackVersionInfo component in maintenance page. - Improved README and CONTRIBUTING documentation for clarity.
This commit is contained in:
2
.github/workflows/build-release.yml
vendored
2
.github/workflows/build-release.yml
vendored
@@ -57,4 +57,4 @@ jobs:
|
||||
VERSION_ARG=${{ github.ref_name }}
|
||||
tags: |
|
||||
quickstack/quickstack:latest
|
||||
# quickstack/quickstack:${{ github.ref_name }}
|
||||
quickstack/quickstack:${{ github.ref_name }}
|
||||
|
||||
2
.github/workflows/canary-release.yml
vendored
2
.github/workflows/canary-release.yml
vendored
@@ -54,6 +54,6 @@ jobs:
|
||||
push: true
|
||||
platforms: linux/amd64
|
||||
build-args: |
|
||||
VERSION_ARG=canary
|
||||
VERSION_ARG=canary-${{ github.run_number }}
|
||||
tags: |
|
||||
quickstack/quickstack:canary
|
||||
|
||||
90
CONTRIBUTING.md
Normal file
90
CONTRIBUTING.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Contributing to QuickStack
|
||||
|
||||
Thank you for your interest in contributing to QuickStack! We welcome contributions from the community and are excited to see what you will bring to the project.
|
||||
|
||||
## How to Contribute
|
||||
|
||||
### Reporting Bugs
|
||||
|
||||
If you find a bug, please create an issue in our [GitHub Issues](https://github.com/biersoeckli/QuickStack/issues) with the following information:
|
||||
- A clear and descriptive title.
|
||||
- A detailed description of the problem.
|
||||
- Steps to reproduce the issue.
|
||||
- Any relevant logs or screenshots.
|
||||
|
||||
### Suggesting Enhancements
|
||||
|
||||
If you have an idea for a new feature or an enhancement to an existing feature, please create an issue in our [GitHub Issues](https://github.com/biersoeckli/QuickStack/issues) with the following information:
|
||||
- A clear and descriptive title.
|
||||
- A detailed description of the proposed enhancement.
|
||||
- Any relevant examples or mockups.
|
||||
|
||||
### Commit Convention
|
||||
|
||||
We use parts of the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification for our commit messages.
|
||||
|
||||
The commit message should be structured as follows:
|
||||
```
|
||||
<type>: <description>
|
||||
|
||||
[optional body]
|
||||
|
||||
[optional footer]
|
||||
```
|
||||
|
||||
The `type` should be one of the following:
|
||||
- `feat`: A new feature.
|
||||
- `fix`: A bug fix.
|
||||
- `style`: Changes that do not affect the meaning of the code (e.g. whitespace, formatting, etc.).
|
||||
- `refactor`: Code changes that neither fix a bug nor add a feature.
|
||||
- `test`: Adding or updating tests.
|
||||
- `chore`: Changes to the build process or auxiliary tools.
|
||||
|
||||
The `description` should be a short, descriptive summary of the changes.
|
||||
The `body` is optional and should provide more detailed information about the changes.
|
||||
The `footer` is optional and should contain any breaking changes, issues closed, or other relevant information.
|
||||
|
||||
Here is an example of a commit message:
|
||||
```
|
||||
feat: add new feature
|
||||
|
||||
This is a more detailed description of the new feature.
|
||||
|
||||
BREAKING CHANGE: this is a breaking change
|
||||
```
|
||||
|
||||
### Submitting Pull Requests
|
||||
|
||||
If you would like to contribute code to QuickStack, please follow these steps:
|
||||
1. Fork the repository and create your branch from `canary`.
|
||||
2. If you have added code that should be tested, add tests.
|
||||
3. Ensure the test suite passes.
|
||||
4. Make sure your code lints.
|
||||
5. Submit a pull request to the `canary` branch.
|
||||
|
||||
### Running Tests
|
||||
|
||||
To run the tests locally, use the following command:
|
||||
```sh
|
||||
yarn test
|
||||
```
|
||||
|
||||
### Environment Setup
|
||||
|
||||
To setup a developement environment, use the provided devcontainer configuration. This will setup a development environment with all necessary dependencies and the correct node version.
|
||||
|
||||
Additionally to the devcontainer, you need a running k3s cluster.
|
||||
To connect to your own k3s test cluster, provide the kuberentes cretendials in the file `k3s-config.yaml` in the root of the project with the following content.
|
||||
|
||||
#### Install Dependencies
|
||||
```sh
|
||||
yarn install
|
||||
```
|
||||
|
||||
#### Start Development Server
|
||||
```sh
|
||||
yarn dev
|
||||
```
|
||||
|
||||
### License
|
||||
By contributing to QuickStack, you agree that your contributions will be licensed under the GPL-3.0 license.
|
||||
@@ -1,5 +1,7 @@
|
||||
FROM node:18-alpine AS base
|
||||
|
||||
ARG VERSION_ARG
|
||||
|
||||
RUN apk add --no-cache openssl
|
||||
|
||||
# Install dependencies only when needed
|
||||
@@ -60,6 +62,7 @@ COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
|
||||
USER nextjs
|
||||
|
||||
ENV PORT=3000
|
||||
ENV QS_VERSION=$VERSION_ARG
|
||||
|
||||
# server.js is created by next build from the standalone output
|
||||
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
|
||||
|
||||
16
README.md
16
README.md
@@ -1,19 +1,25 @@
|
||||
# QuickStack
|
||||
|
||||
<img src="/public/quick-stack-logo-light.png" alt="QuickStack Logo" width="300" style="
|
||||
display: 'block',
|
||||
margin: 'auto',
|
||||
marginBottom: '20px'" />
|
||||
|
||||
QuickStack is a open source self-hosted Platform-as-a-Service (PaaS) solution designed to simplify the management of containerized applications on Virtual Private Server (VPS) infrastructures.
|
||||
Developed as part of a student project at the [Eastern Switzerland University of Applied Sciences](https://ost.ch/), QuickStack provides a scalable and cost-effective alternative to commercial cloud PaaS offerings like Vercel, Digital Ocean App Platform or Azure App Service.
|
||||
|
||||
## Key Features
|
||||
|
||||
* **Simple Installation:** Deploy QuickStack on a VPS with a single command.
|
||||
* **One-Command Installation:** Deploy QuickStack on a VPS with a single command.
|
||||
* **Git Integration:** Deploy applications directly from public or private Git repositories.
|
||||
* **Docker Container Deployment:** Deploy Docker containers from a Docker Hub, a public or a private registry.
|
||||
* **Live Logging:** Debug running containers with live log streams.
|
||||
* **Web Terminal:** Access a web-based terminal directly within the container for debugging.
|
||||
* **SSL Certificate Management:** Automatic SSL certificate generation via Let's Encrypt.
|
||||
* **Resource Management:** Set resource limits (CPU, RAM, storage) for each application.
|
||||
* **Monitoring Dashboard:** Track resource consumption and application performance.
|
||||
* **Persistent Storage:** Cluster-wide persistent storage volumes for applications using Longhorn.
|
||||
* **Cluster Support:** Scale applications across multiple VPS nodes using Kubernetes.
|
||||
* **Cluster Support:** Scale applications across multiple VPS nodes.
|
||||
* **Persistent Storage:** Cluster-wide persistent storage volumes for applications.
|
||||
|
||||
## Getting Started
|
||||
### Prerequisites
|
||||
@@ -27,8 +33,10 @@ Before getting started, ensure that you have:
|
||||
curl -sfL https://get.quickstack.dev/setup.sh | sh -
|
||||
```
|
||||
|
||||
Visit our [docs](https://quickstack.dev/docs/intro) for more detailed installation instructions:
|
||||
|
||||
## Contributing
|
||||
Contributions are welcome! If you have ideas for new features or find bugs, please submit an issue or pull request.
|
||||
Contributions are welcome! Further information on how to contribute can be found in the [CONTRIBUTING.md](CONTRIBUTING.md) file.
|
||||
|
||||
## License
|
||||
This project is licensed under the GPL-3.0 license.
|
||||
|
||||
BIN
public/quick-stack-logo-light.png
Normal file
BIN
public/quick-stack-logo-light.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
@@ -9,6 +9,7 @@ import s3TargetService from "@/server/services/s3-target.service";
|
||||
import QuickStackVersionInfo from "./qs-version-info";
|
||||
import QuickStackMaintenanceSettings from "./qs-maintenance-settings";
|
||||
import BreadcrumbSetter from "@/components/breadcrumbs-setter";
|
||||
import quickStackService from "@/server/services/qs.service";
|
||||
|
||||
export default async function MaintenancePage() {
|
||||
|
||||
@@ -16,6 +17,7 @@ export default async function MaintenancePage() {
|
||||
const useCanaryChannel = await paramService.getBoolean(ParamService.USE_CANARY_CHANNEL, false);
|
||||
const qsPodInfos = await podService.getPodsForApp(Constants.QS_NAMESPACE, Constants.QS_APP_NAME);
|
||||
const qsPodInfo = qsPodInfos.find(p => !!p);
|
||||
const currentVersion = await quickStackService.getVersionOfCurrentQuickstackInstance();
|
||||
|
||||
return (
|
||||
<div className="flex-1 space-y-4 pt-6">
|
||||
@@ -32,7 +34,7 @@ export default async function MaintenancePage() {
|
||||
},
|
||||
]} />
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div><QuickStackVersionInfo useCanaryChannel={useCanaryChannel!} /></div>
|
||||
<div><QuickStackVersionInfo currentVersion={currentVersion} useCanaryChannel={useCanaryChannel!} /></div>
|
||||
<div><QuickStackMaintenanceSettings qsPodName={qsPodInfo?.podName} /></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -14,8 +14,10 @@ import React from "react";
|
||||
|
||||
export default function QuickStackVersionInfo({
|
||||
useCanaryChannel,
|
||||
currentVersion
|
||||
}: {
|
||||
useCanaryChannel: boolean
|
||||
useCanaryChannel: boolean;
|
||||
currentVersion: string;
|
||||
}) {
|
||||
|
||||
const useConfirm = useConfirmDialog();
|
||||
|
||||
@@ -15,6 +15,10 @@ class QuickStackService {
|
||||
private readonly QUICKSTACK_SERVICEACCOUNT_NAME = 'qs-service-account';
|
||||
private readonly CLUSTER_ISSUER_NAME = 'letsencrypt-production';
|
||||
|
||||
async getVersionOfCurrentQuickstackInstance() {
|
||||
return process.env.QS_VERSION || undefined;
|
||||
}
|
||||
|
||||
async updateQuickStack(useCanaryChannel = false) {
|
||||
const existingDeployment = await this.getExistingDeployment();
|
||||
await this.createOrUpdateDeployment(existingDeployment.nextAuthSecret, useCanaryChannel ? 'canary' : 'latest');
|
||||
|
||||
Reference in New Issue
Block a user