Skip to content

Merge pull request #3525 from mapfish/backport/3524-to-3.31 #6337

Merge pull request #3525 from mapfish/backport/3524-to-3.31

Merge pull request #3525 from mapfish/backport/3524-to-3.31 #6337

Workflow file for this run

name: Continuous integration
on:
push:
branches:
- master
- '[0-9]+.[0-9]+'
tags:
- '*'
pull_request:
permissions:
packages: write
actions: write
contents: write
env:
HAS_SECRETS: ${{ secrets.HAS_SECRETS }}
jobs:
main:
name: Continuous integration
runs-on: ubuntu-24.04
timeout-minutes: 30
if: "!startsWith(github.event.head_commit.message, '[skip ci] ')"
steps:
- run: docker system prune --all --force
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: python3 -m pip install --requirement=ci/requirements.txt
- uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
restore-keys: "pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}\npre-commit-"
- run: pre-commit run --all-files
- run: git diff --exit-code --patch > /tmp/pre-commit.patch || true
if: failure()
- uses: actions/upload-artifact@v4
with:
name: Apply pre-commit fix.patch
path: /tmp/pre-commit.patch
retention-days: 1
if: failure()
- name: Print environment information
run: c2cciutils-env
- name: Get tag
id: tag2
uses: frabert/replace-string-action@v2.5
with:
pattern: refs/tags/(.*)
string: '{{ github.ref }}'
replace-with: $1
if: startsWith(github.ref, 'refs/tags/')
- run: echo --${{ steps.tag2.outputs.replaced }}--
- uses: camptocamp/initialise-gopass-summon-action@v2
with:
ci-gpg-private-key: ${{secrets.CI_GPG_PRIVATE_KEY}}
github-gopass-ci-token: ${{secrets.GOPASS_CI_GITHUB_TOKEN}}
patterns: docker
if: env.HAS_SECRETS == 'HAS_SECRETS'
- run: gpg --export-secret-keys --armor D121AF2DFA8E140688BD968930C9B913FD42EF13 > CI.asc
if: env.HAS_SECRETS == 'HAS_SECRETS'
- id: tag
run: echo "tag=$(echo ${{ github.ref }}|sed 's%refs/tags/%%g')" >> $GITHUB_OUTPUT
if: startsWith(github.ref, 'refs/tags/')
- run: sed --in-place 's/version=.*/version=${{ steps.tag.outputs.tag }}/g' gradle.properties
if: startsWith(github.ref, 'refs/tags/')
- id: last-tag
run: echo "tag=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT
if: "!startsWith(github.ref, 'refs/tags/')"
- id: no-tag
run: echo "nb=$(git log --oneline ${{ steps.last-tag.outputs.tag }}..HEAD|wc -l)" >> $GITHUB_OUTPUT
if: "!startsWith(github.ref, 'refs/tags/')"
- run: sed --in-place 's/version=.*/version=${{ steps.last-tag.outputs.tag }}/g' gradle.properties
if: "!startsWith(github.ref, 'refs/tags/') && steps.no-tag.outputs.nb == 0"
- run:
sed --in-place 's/version=.*/version=${{ steps.last-tag.outputs.tag }}+${{ steps.no-tag.outputs.nb
}}/g' gradle.properties
if: "!startsWith(github.ref, 'refs/tags/') && steps.no-tag.outputs.nb > 0"
- id: date
run: echo "date=$(date +%Y%m%d.%H%M%S)" >> $GITHUB_OUTPUT
if: github.ref == 'refs/heads/master'
- run: sed --in-place 's/version=.*/version=0.${{ steps.date.outputs.date }}.SNAPSHOT/g' gradle.properties
if: github.ref == 'refs/heads/master'
- run: sed --in-place 's/enablePublishing=false/enablePublishing=true/g' gradle.properties
if: env.HAS_SECRETS == 'HAS_SECRETS'
- run: git diff
- run: make build
- run: make checks
- uses: actions/upload-artifact@v4
with:
name: Checkstyle and SpotBugs reports
path: reports
if-no-files-found: ignore
if: always()
- timeout-minutes: 10
run: make tests
- uses: actions/upload-artifact@v4
with:
name: Unit test results
path: core/build/resources/test/org/mapfish/print/
if-no-files-found: ignore
if: failure()
- uses: actions/upload-artifact@v4
with:
name: Unit test report
path: core/build/reports/tests/test/
if-no-files-found: ignore
if: always()
- run: make acceptance-tests-up
- run: make acceptance-tests-run
- run: c2cciutils-docker-logs || true
if: always()
- uses: actions/upload-artifact@v4
with:
name: Acceptance tests (Examples)
path: examples/build/resources/test/examples/
if-no-files-found: ignore
if: failure()
- run: git stash
if: always()
- name: Publish
run: c2cciutils-publish
if: env.HAS_SECRETS == 'HAS_SECRETS'
- run: git diff --exit-code --patch > /tmp/dpkg-versions.patch || true
if: failure()
- uses: actions/upload-artifact@v4
with:
name: Update dpkg versions list.patch
path: /tmp/dpkg-versions.patch
retention-days: 1
if: failure()
- run: git stash pop
- run: >
docker run --rm --env=GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} mapfish_print_builder
bash -c 'gradle publish'
if:
( startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' ) && env.HAS_SECRETS ==
'HAS_SECRETS'
- id: version
run: echo "version=$(grep version gradle.properties|sed "s/version=\(.*\)/\1/g")" > $GITHUB_OUTPUT
- run: echo "${{ steps.version.outputs.version }}"
- run: make dist
- name: Create Release
uses: actions/github-script@v7
with:
script: |-
const fs = require('fs');
const release = await github.request('POST /repos/{owner}/{repo}/releases', {
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: context.ref,
name: '${{ steps.tag.outputs.tag }}',
draft: false,
prerelease: false,
generate_release_notes: false,
headers: {
'X-GitHub-Api-Version': '2022-11-28'
}
});
for (const archive of [
{prefix: 'print-servlet-', suffix: '.war', filePrefix: './core/build/libs/print-servlet-', 'mime-type': 'application/java-archive'},
{prefix: 'print-cli-', suffix: '.zip', filePrefix: './core/build/distributions/core-', 'mime-type': 'application/zip'},
{prefix: 'print-lib-', suffix: '.jar', filePrefix: './core/build/libs/print-lib-', 'mime-type': 'application/java-archive'},
{prefix: 'print-lib-', suffix: '-sources.jar', filePrefix: './core/build/libs/print-lib-', 'mime-type': 'application/java-archive'},
{prefix: 'print-lib-', suffix: '-javadoc.jar', filePrefix: './core/build/libs/print-lib-', 'mime-type': 'application/java-archive'},
]) {
await github.rest.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.data.id,
name: archive.prefix + '${{ steps.version.outputs.version }}' + archive.suffix,
data: fs.readFileSync(archive.filePrefix + '${{ steps.version.outputs.version }}' + archive.suffix),
headers: {
'X-GitHub-Api-Version': '2022-11-28',
'content-type': archive['mime-type']
},
});
}
if: startsWith(github.ref, 'refs/tags/') && env.HAS_SECRETS == 'HAS_SECRETS'
# Update the documentation
- uses: actions/checkout@v4
with:
repository: mapfish/mapfish-print-doc
token: ${{ secrets.GOPASS_CI_GITHUB_TOKEN }}
path: mapfish-print-doc
if: github.ref == 'refs/heads/master' && env.HAS_SECRETS == 'HAS_SECRETS'
- name: Extract the documentation
run: |
docker run --rm --detach --name=doc mapfish_print_builder
cd ${GITHUB_WORKSPACE}/mapfish-print-doc
git config user.email "ci@camptocamp.com"
git config user.name "CI"
git rm --ignore-unmatch -rqf .
docker cp doc:/src/docs/build/site/. .
git add -A .
git commit -m 'Update docs'
if: github.ref == 'refs/heads/master' && env.HAS_SECRETS == 'HAS_SECRETS'
- name: Publish the documentation
run: |
cd ${GITHUB_WORKSPACE}/mapfish-print-doc
git push origin gh-pages
if: github.ref == 'refs/heads/master' && env.HAS_SECRETS == 'HAS_SECRETS'
- name: Trigger changelog workflow
uses: actions/github-script@v7
with:
script: |-
if (process.env.GITHUB_REF_TYPE == 'tag') {
console.log('Trigger changelog');
await github.rest.repos.createDispatchEvent({
owner: 'mapfish',
repo: 'mapfish-print',
event_type: 'changelog',
});
}