Update pipeline for Gitea

This commit is contained in:
Stanislas Daniel Claude Dolcini 2024-08-25 11:26:29 +02:00
parent 4f03102e34
commit 4486930873
Signed by untrusted user: Stan
GPG Key ID: 244943DFF8370D60

View File

@ -1,129 +1,92 @@
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
---
name: CI Pipeline
on:
- push
- pull_request
jobs:
check_templates_pr:
name: Check Templates (PR)
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: apt-get update && apt-get install libxml2-utils -qqy
- name: Fetch main branch
run: git fetch origin main
- name: Get changed files
id: files
run: |
files=$(git diff-tree --no-commit-id --name-only -r HEAD origin/${{ github.event.pull_request.base.ref }})
files=$(echo "$files" | grep 'simulation/templates/' | grep '.xml' || true)
files=$(echo "$files" | awk '{ gsub("community-mod/","", $0); print $0 }')
echo "::set-output name=files::$files"
- name: Validate templates
run: |
if [ -z "${{ steps.files.outputs.files }}" ]; then
echo "Nothing to check"
else
python3 -m scripts.entvalidate -p "${{ steps.files.outputs.files }}"
fi
check_templates_all:
name: Check Templates (All)
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: apt-get update && apt-get install libxml2-utils -qqy
- name: Validate all templates
run: python3 -m scripts.entvalidate
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
package_mod_job:
name: "Package and Sign Mod"
runs-on: ubuntu-latest
needs: check_version_increment
env:
MOD_NAME: 0ad-community-mod
if: github.ref == 'refs/heads/signed'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip3 install requests
- name: Install minisign
run: |
wget https://github.com/jedisct1/minisign/releases/download/0.11/minisign-0.11-linux.tar.gz
tar -xvf minisign-0.11-linux.tar.gz
cp minisign-linux/x86_64/minisign /usr/local/bin/minisign
rm -rf minisign-linux
rm minisign-0.11-linux.tar.gz
minisign -v
- name: Set env secrets
run: |
echo "MODIO_API_KEY=${{ secrets.MODIO_API_KEY }}" >> $GITHUB_ENV
echo "MODIO_OAUTH2_TOKEN=${{ secrets.MODIO_OAUTH2_TOKEN }}" >> $GITHUB_ENV
echo "MOD_VERSION=$(python3 -m scripts.get_version)" >> $GITHUB_ENV
echo "${{ secrets.MINISIGN_KEY }}" > signature-file.pem
- name: Check Version Increment
run: |
git fetch --tags
if git tag -l | grep -q "^${{ env.VERSION }}$"; then
echo "Tag ${{ env.VERSION }} already exists"
exit 1
fi
- uses: https://gitea.wildfiregames.com/Stan/gitea-action-build-pyromod@main
with:
name: ${{ env.MOD_NAME }}
version: ${{ env.MOD_VERSION }}
- name: Create sha256sum
run: |
OUTPUT_FILE="${{ env.MOD_NAME }}-${{ env.MOD_VERSION }}.pyromod"
cd output
sha256sum $OUTPUT_FILE > $OUTPUT_FILE.sha256sum
cat $OUTPUT_FILE.sha256sum
cp -v $OUTPUT_FILE.sha256sum ../
cp -v ${{ env.MOD_NAME }}-${{ env.MOD_VERSION }}.pyromod ../${{ env.MOD_NAME }}-${{ env.MOD_VERSION }}.zip
- name: Sign
run: |
echo ${{ secrets.MINISIGN_KEY_PW }} | minisign -S -s signature-file.pem -m "${{ env.MOD_NAME }}-${{ env.MOD_VERSION }}.zip" -x signature.minisign
- name: Upload to Modio
run: |
MOD_FILE_PATH="${{ env.MOD_NAME }}-${{ env.MOD_VERSION }}.zip" MOD_VERSION="${{ env.MOD_VERSION }}" python3 -m scripts.modio