CI: build and publish every package from Woodpecker
Pushes to main run the tests. The Deploy button publishes the Windows, RPM, deb and F-Droid packages to the same NAS directories a dev machine uses, with the same keys, then runs update-repo.sh, so public URLs don't change. Builds run on Debian 12, in an image defined in ci/builder, so the Linux packages now need glibc 2.36 instead of Fedora 44's 2.43.
This commit is contained in:
23
.woodpecker/builder.yaml
Normal file
23
.woodpecker/builder.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
# Build and push the image the other pipelines run in, from ci/builder.
|
||||
#
|
||||
# Trigger: open any pipeline for this repo in Woodpecker, click "Deploy", and
|
||||
# set the deploy target to `builder`.
|
||||
|
||||
when:
|
||||
- event: deployment
|
||||
evaluate: 'CI_PIPELINE_DEPLOY_TARGET == "builder"'
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: woodpeckerci/plugin-docker-buildx:6.1.1
|
||||
settings:
|
||||
registry: registry.apps.millslan.net
|
||||
repo: registry.apps.millslan.net/garrettmills/mtgc-builder
|
||||
tags: latest
|
||||
platforms: linux/amd64
|
||||
context: ci/builder
|
||||
dockerfile: ci/builder/Dockerfile
|
||||
username:
|
||||
from_secret: registry_username
|
||||
password:
|
||||
from_secret: registry_password
|
||||
42
.woodpecker/check.yaml
Normal file
42
.woodpecker/check.yaml
Normal file
@@ -0,0 +1,42 @@
|
||||
# Test every push to main. Its pipeline is also the one to click "Deploy" on;
|
||||
# see release.yaml.
|
||||
|
||||
when:
|
||||
- event: push
|
||||
branch: main
|
||||
|
||||
steps:
|
||||
- name: prepare
|
||||
image: alpine:3.22
|
||||
volumes:
|
||||
- mtgc-ci-cache:/cache
|
||||
commands:
|
||||
- chown -R 1000:1000 /woodpecker
|
||||
- chown 1000:1000 /cache
|
||||
|
||||
- name: test
|
||||
image: registry.apps.millslan.net/garrettmills/mtgc-builder:latest
|
||||
pull: true
|
||||
volumes:
|
||||
- mtgc-ci-cache:/cache
|
||||
environment:
|
||||
HOME: /cache/home
|
||||
CARGO_HOME: /cache/cargo
|
||||
CARGO_TARGET_DIR: /cache/target-test
|
||||
CARGO_BUILD_JOBS: "4"
|
||||
backend_options:
|
||||
kubernetes:
|
||||
securityContext:
|
||||
runAsUser: 1000
|
||||
runAsGroup: 1000
|
||||
resources:
|
||||
requests:
|
||||
cpu: "4"
|
||||
memory: 6Gi
|
||||
limits:
|
||||
memory: 12Gi
|
||||
commands:
|
||||
- mkdir -p "$HOME"
|
||||
- npm ci
|
||||
- npm run build
|
||||
- cargo test --locked -p mtgc-core -p mtgc -p mtgc-server
|
||||
103
.woodpecker/release.yaml
Normal file
103
.woodpecker/release.yaml
Normal file
@@ -0,0 +1,103 @@
|
||||
# Build the release packages and publish them.
|
||||
#
|
||||
# Trigger: open a pipeline for this repo in Woodpecker, click "Deploy", and set
|
||||
# the deploy target to `all`, `windows`, `rpm`, `deb` or `fdroid`.
|
||||
#
|
||||
# These are steps in one workflow, not a workflow per target: Woodpecker drops a
|
||||
# workflow whose dependency was filtered out, and the cache volume is
|
||||
# ReadWriteOnce. Each target also runs after a failure, so one bad target doesn't
|
||||
# hold back the rest, and the pipeline still ends up red.
|
||||
#
|
||||
# The volumes are defined in the platform repo (src/apps/woodpecker), and this
|
||||
# repo must be marked Trusted → Volumes in Woodpecker to mount them.
|
||||
|
||||
when:
|
||||
- event: deployment
|
||||
evaluate: 'CI_PIPELINE_DEPLOY_TARGET != "builder"'
|
||||
|
||||
# The version is the commit count, and the default clone fetches a single commit.
|
||||
clone:
|
||||
git:
|
||||
image: woodpeckerci/plugin-git
|
||||
settings:
|
||||
partial: false
|
||||
depth: 0
|
||||
|
||||
variables:
|
||||
- &builder
|
||||
image: registry.apps.millslan.net/garrettmills/mtgc-builder:latest
|
||||
pull: true
|
||||
backend_options:
|
||||
kubernetes:
|
||||
# The owner of the release directories on the NAS.
|
||||
securityContext:
|
||||
runAsUser: 1000
|
||||
runAsGroup: 1000
|
||||
resources:
|
||||
requests:
|
||||
cpu: "4"
|
||||
memory: 6Gi
|
||||
limits:
|
||||
memory: 12Gi
|
||||
- &publish
|
||||
volumes:
|
||||
- mtgc-release:/nfs/hal9000/mtgc
|
||||
- mtgc-ci-cache:/cache
|
||||
environment:
|
||||
HOME: /cache/home
|
||||
CARGO_HOME: /cache/cargo
|
||||
CARGO_BUILD_JOBS: "4"
|
||||
GRADLE_OPTS: -Dorg.gradle.daemon=false
|
||||
|
||||
steps:
|
||||
- name: prepare
|
||||
image: alpine:3.22
|
||||
volumes:
|
||||
- mtgc-ci-cache:/cache
|
||||
commands:
|
||||
- chown -R 1000:1000 /woodpecker
|
||||
- chown 1000:1000 /cache
|
||||
|
||||
- name: windows
|
||||
<<: [*builder, *publish]
|
||||
commands:
|
||||
- scripts/ci-publish.sh windows
|
||||
when:
|
||||
- status: [success, failure]
|
||||
evaluate: 'CI_PIPELINE_DEPLOY_TARGET in ["all", "windows"]'
|
||||
|
||||
- name: rpm
|
||||
<<: [*builder, *publish]
|
||||
commands:
|
||||
- scripts/ci-publish.sh rpm
|
||||
when:
|
||||
- status: [success, failure]
|
||||
evaluate: 'CI_PIPELINE_DEPLOY_TARGET in ["all", "rpm"]'
|
||||
|
||||
- name: deb
|
||||
<<: [*builder, *publish]
|
||||
commands:
|
||||
- scripts/ci-publish.sh deb
|
||||
when:
|
||||
- status: [success, failure]
|
||||
evaluate: 'CI_PIPELINE_DEPLOY_TARGET in ["all", "deb"]'
|
||||
|
||||
- name: fdroid
|
||||
<<: [*builder, *publish]
|
||||
commands:
|
||||
- scripts/ci-publish.sh fdroid
|
||||
when:
|
||||
- status: [success, failure]
|
||||
evaluate: 'CI_PIPELINE_DEPLOY_TARGET in ["all", "fdroid"]'
|
||||
|
||||
# update-repo.sh finds ../static/mtgc, so this mounts it there.
|
||||
- name: update-repo
|
||||
<<: *builder
|
||||
volumes:
|
||||
- mtgc-release:/nfs/hal9000/mtgc
|
||||
- mtgc-public:/nfs/hal9000/static/mtgc
|
||||
commands:
|
||||
- cd /nfs/hal9000/mtgc
|
||||
- ./update-repo.sh
|
||||
when:
|
||||
- status: [success, failure]
|
||||
Reference in New Issue
Block a user