0ad-community-mod-a26/.gitlab-ci.yml

130 lines
3.7 KiB
YAML

check_templates_pr:
image:
name: $CI_REGISTRY_IMAGE:latest
entrypoint: [""]
stage: build
only:
refs:
- merge_requests
script:
- git fetch origin main
- files="$(git diff-tree --no-commit-id --name-only -r HEAD origin/$CI_DEFAULT_BRANCH)"
- files="$(echo """$files""" | grep 'simulation/templates/' | grep '.xml' || true)"
- files="$(echo """$files""" | awk '{ gsub("community-mod/","", $0); print $0 }')"
- |
if [ -z "$files" ]
then
echo "Nothing to check"
else
python3 -m scripts.entvalidate -p "$files"
fi
check_templates_all:
image:
name: $CI_REGISTRY_IMAGE:latest
entrypoint: [""]
stage: build
only:
refs:
- main
changes:
- community-mod/**/*
script:
- python3 -m scripts.entvalidate
check_version_increment:
stage: deploy
when: manual
allow_failure: false
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_BRANCH == "signed"
script:
- VERSION=$(python3 -m scripts.get_version)
- git tag -l
- git tag -l $VERSION
- "[ -z $(git tag -l $VERSION) ] || exit 1 "
package_mod_job:
image:
name: "$CI_REGISTRY/0ad/0ad-community-mod-a26/pyrogenesis:0.25.0"
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_BRANCH == "signed"
needs:
- job: check_version_increment
artifacts:
paths:
- community-mod.zip
reports:
dotenv: build.env
script:
- VERSION=$(python3 -m scripts.get_version)
- echo "VERSION=${VERSION}" >> build.env
- /usr/games/0ad -archivebuild=community-mod -archivebuild-output=community-mod.zip
store_mod:
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_BRANCH == "signed"
image: curlimages/curl:latest
stage: deploy
needs:
- job: package_mod_job
artifacts: true
script:
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file community-mod.zip "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/community-mod/${VERSION}/community-mod.zip"'
release_job:
stage: deploy
image: registry.gitlab.com/gitlab-org/release-cli:latest
needs:
- job: store_mod
- job: package_mod_job
artifacts: true
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_BRANCH == "signed"
script:
- echo "running release_job for $TAG"
release:
name: 'Community Mod $VERSION'
description: 'Version $VERSION of the 0 A.D. community mod for A26'
tag_name: '$VERSION'
ref: '$CI_COMMIT_SHA'
assets:
links:
- name: 'community-mod.zip'
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/community-mod/${VERSION}/community-mod.zip'
sign_and_upload_to_modio:
stage: deploy
image:
name: $CI_REGISTRY_IMAGE:latest
entrypoint: [""]
rules:
- if: $CI_COMMIT_BRANCH == "signed"
when: manual
script:
- ls
- VERSION=$(python3 -m scripts.get_version)
- wget "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/community-mod/${VERSION}/community-mod.zip" -O "0ad-community-mod-${VERSION}.zip"
- echo $MINISIGN_KEY_PW | minisign -S -s $MINISIGN_KEY -m "0ad-community-mod-${VERSION}.zip" -x signature.minisign
- MOD_FILE_PATH="0ad-community-mod-${VERSION}.zip" MOD_VERSION="$VERSION" python3 -m scripts.modio
build_docker_image:
image: docker:19.03.12
rules:
- if: $CI_COMMIT_BRANCH == "signed"
when: manual
stage: build
services:
- docker:19.03.12-dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG -t $CI_REGISTRY_IMAGE:latest .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
- docker push $CI_REGISTRY_IMAGE:latest