Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8369b2a6ba | ||
|
|
d4a6726930 | ||
|
|
0d6e0fa565 |
+4
-4
@@ -4,7 +4,7 @@ name: build-and-push
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- tag
|
||||
- push
|
||||
- pull_request
|
||||
|
||||
steps:
|
||||
@@ -24,11 +24,11 @@ steps:
|
||||
context: .
|
||||
registry: gitea.jambotron.com
|
||||
repo: gitea.jambotron.com/liosha84/htop-web
|
||||
auto_tag: true
|
||||
tags: ${DRONE_COMMIT_SHA:0:7},main-latest
|
||||
username:
|
||||
from_secret: REGISTRY_USERNAME
|
||||
password:
|
||||
from_secret: REGISTRY_PASSWORD
|
||||
when:
|
||||
event:
|
||||
- tag
|
||||
branch:
|
||||
- main
|
||||
|
||||
Generated
+7
@@ -1,5 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel>
|
||||
<module name="backend" target="21" />
|
||||
<module name="backend.main" target="21" />
|
||||
<module name="backend.test" target="21" />
|
||||
</bytecodeTargetLevel>
|
||||
</component>
|
||||
<component name="JavacSettings">
|
||||
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
|
||||
<module name="backend" options="-parameters" />
|
||||
|
||||
@@ -6,6 +6,9 @@ This project follows [Semantic Versioning](https://semver.org/). For more detail
|
||||
|
||||
## Unreleased
|
||||
|
||||
- **Automatic releases on merge** — Drone now builds and pushes Docker images automatically when a Pull Request is merged into `main`. No manual Git tags are needed. Each merge produces two tags: `main-{commit-sha}` for traceability and `main-latest` for the most recent stable build.
|
||||
- **Git-flow workflow** — development happens in the `develop` branch. When code is ready for release, create a Pull Request from `develop` → `main`. Merging the PR triggers the automatic release.
|
||||
|
||||
## v0.3.0
|
||||
|
||||
- **CI/CD migrated to Drone** — replaced Gitea Actions with Drone CI/CD (`.drone.yml`). The Docker plugin `auto_tag` feature automatically creates Semantic Versioning tags (`0.3.0`, `0.3`) on Git tag pushes. Configure `REGISTRY_USERNAME` and `REGISTRY_PASSWORD` secrets in the Gitea repository settings.
|
||||
|
||||
@@ -35,7 +35,11 @@ def frontendDir = file('../frontend')
|
||||
def frontendDistDir = file('../frontend/dist/frontend/browser')
|
||||
def springStaticDir = file('src/main/resources/static')
|
||||
|
||||
// Skip frontend build tasks when building inside Docker (frontend already built in Stage 1)
|
||||
def skipFrontend = project.hasProperty('skipFrontend') || System.getenv('SKIP_FRONTEND') != null
|
||||
|
||||
tasks.register('installFrontendDependencies', Exec) {
|
||||
onlyIf { !skipFrontend }
|
||||
workingDir frontendDir
|
||||
|
||||
inputs.file(file('../frontend/package.json'))
|
||||
@@ -50,6 +54,7 @@ tasks.register('installFrontendDependencies', Exec) {
|
||||
}
|
||||
|
||||
tasks.register('buildFrontend', Exec) {
|
||||
onlyIf { !skipFrontend }
|
||||
dependsOn 'installFrontendDependencies'
|
||||
workingDir frontendDir
|
||||
|
||||
@@ -66,9 +71,6 @@ tasks.register('buildFrontend', Exec) {
|
||||
}
|
||||
}
|
||||
|
||||
// Skip frontend build tasks when building inside Docker (frontend already built in Stage 1)
|
||||
def skipFrontend = project.hasProperty('skipFrontend') || System.getenv('SKIP_FRONTEND') != null
|
||||
|
||||
tasks.register('copyFrontend', Copy) {
|
||||
onlyIf { !skipFrontend }
|
||||
dependsOn 'buildFrontend'
|
||||
|
||||
+44
-26
@@ -93,11 +93,26 @@ docker run -d \
|
||||
|
||||
## Release process
|
||||
|
||||
### Workflow overview
|
||||
|
||||
The project uses a **Git-flow** workflow with automatic releases:
|
||||
|
||||
1. All development happens in the **`develop`** branch.
|
||||
2. When code is ready for release, create a **Pull Request** from `develop` → `main`.
|
||||
3. **Merge the PR** into `main` — this triggers an automatic release.
|
||||
4. **Drone** builds the Docker image and pushes it to the Gitea Container Registry.
|
||||
|
||||
**No manual Git tags are needed** — merging into `main` is the release.
|
||||
|
||||
```
|
||||
develop → PR → merge into main → Drone builds → Docker image pushed
|
||||
```
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Drone CI/CD runner must be configured and running.
|
||||
- Drone CI/CD runner must be configured and running at `drone.jambotron.com`.
|
||||
- Gitea Container Registry must be enabled on the server.
|
||||
- Repository secrets `REGISTRY_USERNAME` and `REGISTRY_PASSWORD` must be set in the Gitea repository.
|
||||
- Repository secrets `REGISTRY_USERNAME` and `REGISTRY_PASSWORD` must be set in Drone.
|
||||
|
||||
### Enabling Container Registry on Gitea server
|
||||
|
||||
@@ -136,15 +151,19 @@ sudo systemctl restart gitea
|
||||
|
||||
### Configuring Drone CI/CD
|
||||
|
||||
The repository uses **Drone** for CI/CD. The configuration file `.drone.yml` is already included in the repository.
|
||||
The repository uses **Drone** for CI/CD. The configuration file `.drone.yml` is already included in the repository. Drone is hosted at a separate domain: `drone.jambotron.com`.
|
||||
|
||||
**1. Enable Drone for the repository.**
|
||||
**1. Log in to Drone.**
|
||||
|
||||
In Gitea, open the repository and go to **Settings → Drone**. Enable Drone CI/CD for the repository.
|
||||
Open `https://drone.jambotron.com` and sign in with your Gitea account.
|
||||
|
||||
**2. Configure Drone secrets.**
|
||||
**2. Activate the repository in Drone.**
|
||||
|
||||
In Gitea, open the repository and go to **Settings → Secrets** (or **Variables and Secrets → Secrets**). Add two secrets:
|
||||
After logging in, find `Liosha84/htop-web` in the repository list and click **Activate**.
|
||||
|
||||
**3. Configure Drone secrets.**
|
||||
|
||||
In Drone, open the repository and go to **Settings → Secrets**. Add two secrets:
|
||||
|
||||
**First secret:**
|
||||
- **Name:** `REGISTRY_USERNAME`
|
||||
@@ -172,49 +191,48 @@ The CI/CD workflow cannot use your account password. You need a Personal Access
|
||||
|
||||
### Creating a release
|
||||
|
||||
1. **Update `CHANGELOG.md`** with changes for the new version.
|
||||
1. **Update `CHANGELOG.md`** with changes for the new version in the `develop` branch.
|
||||
|
||||
2. **Commit and push** your changes:
|
||||
2. **Commit and push** your changes to `develop`:
|
||||
|
||||
```bash
|
||||
git checkout develop
|
||||
git add -A
|
||||
git commit -m "Prepare release v0.2.0"
|
||||
git push origin master
|
||||
git commit -m "Feature: new functionality"
|
||||
git push origin develop
|
||||
```
|
||||
|
||||
3. **Create and push a Git tag** with Semantic Versioning:
|
||||
3. **Create a Pull Request** from `develop` → `main`:
|
||||
|
||||
```bash
|
||||
git tag -a v0.2.0 -m "Release v0.2.0: new features and fixes"
|
||||
git push origin v0.2.0
|
||||
```
|
||||
Open `https://gitea.jambotron.com/jambotron_gang/htop-web/compare/develop...main` and click **Create Pull Request**.
|
||||
|
||||
4. **Drone** will automatically:
|
||||
4. **Merge the PR** into `main`.
|
||||
|
||||
5. **Drone** will automatically:
|
||||
- Build the Docker image using the multi-stage Dockerfile
|
||||
- Auto-tag it using Semantic Versioning: `v0.2.0` produces tags `0.2`, `0.2.0`
|
||||
- Push all tags to the Gitea Container Registry
|
||||
- Tag it with the short commit SHA (e.g., `abc1234`) and `main-latest`
|
||||
- Push both tags to the Gitea Container Registry
|
||||
|
||||
### Docker image tags
|
||||
|
||||
Each release produces three Docker image tags:
|
||||
Each merge into `main` produces two Docker image tags:
|
||||
|
||||
| Tag | Example | Description |
|
||||
|-----|---------|-------------|
|
||||
| Full version | `gitea.jambotron.com/liosha84/htop-web:0.2.0` | Exact version, use in production |
|
||||
| Minor version | `gitea.jambotron.com/liosha84/htop-web:0.2` | Latest patch of 0.2.x |
|
||||
| Latest | `gitea.jambotron.com/liosha84/htop-web:latest` | Most recent stable release |
|
||||
| Commit SHA | `gitea.jambotron.com/liosha84/htop-web:abc1234` | Exact commit, use for reproducibility |
|
||||
| Main latest | `gitea.jambotron.com/liosha84/htop-web:main-latest` | Most recent merge into main |
|
||||
|
||||
### Using a specific version in production
|
||||
|
||||
In `docker-compose.yml`, always pin to a specific version:
|
||||
In `docker-compose.yml`, pin to a specific commit SHA:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
htop-web:
|
||||
image: gitea.jambotron.com/liosha84/htop-web:0.2.0
|
||||
image: gitea.jambotron.com/liosha84/htop-web:abc1234
|
||||
```
|
||||
|
||||
Avoid using `:latest` in production — it makes rollbacks impossible and breaks reproducibility.
|
||||
Use `main-latest` for development/testing environments. For production, always use the commit SHA tag so you can roll back to a specific version.
|
||||
|
||||
## Contribution guidelines
|
||||
|
||||
|
||||
Reference in New Issue
Block a user