feat: automatic releases on merge to main
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing

- Drone now triggers on push to main branch instead of Git tags
- Each merge produces two Docker tags: main-{commit-sha} and main-latest
- No manual Git tags needed — merging PR develop → main is the release
- Updated docs/DEVELOPMENT.md with new Git-flow workflow
- Updated CHANGELOG.md with automatic releases feature
This commit is contained in:
2026-10-29 00:39:31 +01:00
parent 0d6e0fa565
commit d4a6726930
4 changed files with 58 additions and 30 deletions
+44 -26
View File
@@ -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