205 lines
5.0 KiB
Markdown
205 lines
5.0 KiB
Markdown
# Minecraft Modpacks
|
|
|
|
Packwiz-managed Minecraft modpacks used by the AGS Minecraft infrastructure.
|
|
|
|
The repository is the source of truth for both client and server modpack configuration. Packs are deployed through Gitea Actions and served as static Packwiz repositories for Pterodactyl.
|
|
|
|
## Packs
|
|
|
|
### Forever World
|
|
|
|
Long-lived NeoForge survival world with a deliberately conservative mod selection.
|
|
|
|
- Minecraft: 1.21.1
|
|
- NeoForge: 21.1.248
|
|
- Packwiz: managed
|
|
- Production: release-based
|
|
|
|
Development:
|
|
|
|
```text
|
|
https://mc.ahmza.com/forever/dev/pack.toml
|
|
```
|
|
|
|
Stable:
|
|
|
|
```text
|
|
https://mc.ahmza.com/forever/stable/pack.toml
|
|
```
|
|
|
|
### Playground
|
|
|
|
Disposable environment for testing mods, updates and configuration changes before considering them for Forever World.
|
|
|
|
Development:
|
|
|
|
```text
|
|
https://mc.ahmza.com/playground/dev/pack.toml
|
|
```
|
|
|
|
## Repository Structure
|
|
|
|
```text
|
|
mc-modpacks/
|
|
├── .gitea/
|
|
│ └── workflows/
|
|
├── scripts/
|
|
│ └── build-site.sh
|
|
├── Dockerfile
|
|
├── sws.toml
|
|
├── forever/
|
|
│ ├── pack.toml
|
|
│ ├── index.toml
|
|
│ ├── mods/
|
|
│ ├── config/
|
|
│ ├── defaultconfigs/
|
|
│ └── README.md
|
|
├── playground/
|
|
│ ├── pack.toml
|
|
│ ├── index.toml
|
|
│ ├── mods/
|
|
│ ├── config/
|
|
│ ├── defaultconfigs/
|
|
│ └── README.md
|
|
└── deploy/
|
|
└── kubernetes/
|
|
```
|
|
|
|
## Development Model
|
|
|
|
`main` represents the current development state.
|
|
|
|
Normal changes are committed directly to `main`:
|
|
|
|
```bash
|
|
git switch main
|
|
|
|
cd forever
|
|
packwiz update <mod>
|
|
packwiz refresh
|
|
|
|
git add .
|
|
git commit -m "Update <mod>"
|
|
git push
|
|
```
|
|
|
|
A push to `main` publishes the pack to its `dev` endpoint.
|
|
|
|
Production is **not** updated by normal commits.
|
|
|
|
### Branches
|
|
|
|
Branches are reserved for substantial or experimental work, for example:
|
|
|
|
```text
|
|
mc-26-migration
|
|
create-major-upgrade
|
|
worldgen-experiment
|
|
test-new-content-mod
|
|
```
|
|
|
|
Small mod updates and configuration changes do not require branches.
|
|
|
|
## Releases
|
|
|
|
Test the development pack before creating a release.
|
|
|
|
Forever World releases use annotated tags:
|
|
|
|
```bash
|
|
git tag -a forever-v1.0.1 -m "Forever World v1.0.1"
|
|
git push origin forever-v1.0.1
|
|
```
|
|
|
|
A release publishes an immutable copy to:
|
|
|
|
```text
|
|
/forever/releases/v1.0.1/
|
|
```
|
|
|
|
and promotes the same build to:
|
|
|
|
```text
|
|
/forever/stable/
|
|
```
|
|
|
|
Production Pterodactyl servers always consume the stable endpoint rather than individual release URLs.
|
|
|
|
### Versioning
|
|
|
|
Approximately follow semantic versioning:
|
|
|
|
| Version | Use |
|
|
|---|---|
|
|
| `v1.0.1` | Bug fixes, configs and routine mod updates |
|
|
| `v1.1.0` | New functionality or compatible mods |
|
|
| `v2.0.0` | Major Minecraft/modpack/world dependency changes |
|
|
|
|
Release tags are immutable. Never move or recreate an existing release tag.
|
|
|
|
## Deployment Flow
|
|
|
|
```text
|
|
Gitea
|
|
│
|
|
push to main
|
|
│
|
|
▼
|
|
Gitea Actions
|
|
│
|
|
▼
|
|
/forever/dev/pack.toml
|
|
│
|
|
▼
|
|
Staging Server
|
|
│
|
|
Test
|
|
│
|
|
forever-v1.x.x tag
|
|
│
|
|
▼
|
|
Gitea Actions
|
|
┌────┴────┐
|
|
▼ ▼
|
|
releases/ stable/
|
|
│
|
|
▼
|
|
Production Server
|
|
```
|
|
|
|
Packwiz is responsible for modpack contents and side filtering.
|
|
|
|
Pterodactyl is responsible for Java, server process management and resources.
|
|
|
|
Kubernetes/SWS provides static hosting for the published Packwiz repositories.
|
|
The publishing workflow runs [`scripts/build-site.sh`](../scripts/build-site.sh),
|
|
which exports committed Git revisions into the documented URL layout, then
|
|
builds the multi-architecture image
|
|
`tea.ahmza.com/ahmza/mcpacks-site`.
|
|
|
|
The workflow finally commits that image's immutable OCI digest to
|
|
`apps/mcpacks/deployment.yaml` in the `ahmza/k8s-starter-pack` repository.
|
|
Argo CD notices that commit and performs the rollout; the workflow does not
|
|
hold Kubernetes credentials or change the cluster directly.
|
|
|
|
The Gitea Actions repository secret `GITEATOKEN` must be able to:
|
|
|
|
- push packages owned by `ahmza`
|
|
- read and write `ahmza/k8s-starter-pack`
|
|
|
|
The `latest` image tag exists only to bootstrap the first Argo CD sync and for
|
|
human inspection. Normal rollouts use the exact content digest recorded in the
|
|
GitOps manifest, making the running version auditable and rollback-friendly.
|
|
|
|
## Rollback
|
|
|
|
Release directories are immutable.
|
|
|
|
If a release causes problems, production can be pointed temporarily at an earlier release:
|
|
|
|
```text
|
|
https://mc.ahmza.com/forever/releases/v1.0.1/pack.toml
|
|
```
|
|
|
|
Do not rewrite an existing release or tag. Fix the issue on `main` and publish a new release.
|