mirror of
https://github.com/Mailu/Mailu.git
synced 2024-12-14 10:53:30 +02:00
679 lines
29 KiB
YAML
679 lines
29 KiB
YAML
name: CI
|
|
on:
|
|
push:
|
|
branches:
|
|
- staging
|
|
- testing
|
|
- '1.8'
|
|
- '1.9'
|
|
- master
|
|
# test branches, e.g. test-debian
|
|
- test-*
|
|
|
|
concurrency: ci-${{ github.ref }}
|
|
|
|
###############################################
|
|
# REQUIRED secrets
|
|
# DOCKER_UN: ${{ secrets.Docker_Login }}
|
|
# Username of docker login for pushing the images to repo $DOCKER_ORG and $DOCKER_ORG_TESTS
|
|
# DOCKER_PW: ${{ secrets.Docker_Password }}
|
|
# Password of docker login for pushing the images to repo $DOCKER_ORG and $DOCKER_ORG_TESTS
|
|
# DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
# The docker repository where the images are pushed to.
|
|
# DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
# The docker repository for test images. Only used for the branch TESTING (BORS try).
|
|
# Add the above secrets to your github repo to determine where the images will be pushed.
|
|
################################################
|
|
# Code block that is used as one liner.
|
|
##!/bin/bash
|
|
#version=$( git tag --sort=version:refname --list "{{ env.MAILU_VERSION }}.*" | tail -1 )
|
|
#root_version=${version%.*}
|
|
#patch_version=${version##*.}
|
|
#if [ "$patch_version" == "" ]
|
|
#then
|
|
# pinned_version={{ env.MAILU_VERSION }}.0
|
|
#else
|
|
# pinned_version=$root_version.$(expr $patch_version + 1)
|
|
#fi
|
|
#echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
|
|
jobs:
|
|
build:
|
|
name: Build images
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
#For branch TESTING, we set the image tag to PR-xxxx
|
|
- name: Derive MAILU_VERSION and PINNED_MAILU_VERSION for branch testing
|
|
if: ${{ env.BRANCH == 'testing' }}
|
|
shell: bash
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
run: |
|
|
echo "MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "PINNED_MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG_TESTS" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION for other branches than testing
|
|
if: ${{ env.BRANCH != 'testing' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'staging' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for staging
|
|
if: ${{ env.BRANCH == 'staging' }}
|
|
shell: bash
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=staging" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for master
|
|
if: ${{ env.BRANCH == 'master' }}
|
|
shell: bash
|
|
env:
|
|
GITHUB_SHA: ${{ env.GITHUB_SHA }}
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=$GITHUB_SHA" >> $GITHUB_ENV
|
|
- name: Create folder for storing images
|
|
run: |
|
|
sudo mkdir -p /images
|
|
sudo chmod 777 /images
|
|
- name: Configure images folder for caching
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: /images
|
|
key: ${{ env.BRANCH }}-${{ github.run_id }}-${{ github.run_number }}
|
|
- name: Check docker-compose version
|
|
run: docker-compose -v
|
|
- name: Login docker
|
|
env:
|
|
DOCKER_UN: ${{ secrets.Docker_Login }}
|
|
DOCKER_PW: ${{ secrets.Docker_Password }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
run: echo "$DOCKER_PW" | docker login --username $DOCKER_UN --password-stdin
|
|
- name: Build all docker images
|
|
env:
|
|
MAILU_VERSION: ${{ env.MAILU_VERSION }}
|
|
PINNED_MAILU_VERSION: ${{ env.PINNED_MAILU_VERSION }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
run: docker-compose -f tests/build.yml build
|
|
- name: Save all docker images
|
|
run: docker save ${{ env.DOCKER_ORG }}/admin ${{ env.DOCKER_ORG }}/clamav ${{ env.DOCKER_ORG }}/docs ${{ env.DOCKER_ORG }}/dovecot ${{ env.DOCKER_ORG }}/fetchmail ${{ env.DOCKER_ORG }}/nginx ${{ env.DOCKER_ORG }}/none ${{ env.DOCKER_ORG }}/postfix ${{ env.DOCKER_ORG }}/radicale ${{ env.DOCKER_ORG }}/rainloop ${{ env.DOCKER_ORG }}/roundcube ${{ env.DOCKER_ORG }}/rspamd ${{ env.DOCKER_ORG }}/setup ${{ env.DOCKER_ORG }}/traefik-certdumper ${{ env.DOCKER_ORG }}/unbound -o /images/images.tar.gz
|
|
|
|
test-core:
|
|
name: Perform core tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
#For branch TESTING, we set the image tag to PR-xxxx
|
|
- name: Derive MAILU_VERSION and PINNED_MAILU_VERSION for branch testing
|
|
if: ${{ env.BRANCH == 'testing' }}
|
|
shell: bash
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
run: |
|
|
echo "MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "PINNED_MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG_TESTS" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION for other branches than testing
|
|
if: ${{ env.BRANCH != 'testing' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for staging
|
|
if: ${{ env.BRANCH == 'staging' }}
|
|
shell: bash
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=staging" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for master
|
|
if: ${{ env.BRANCH == 'master' }}
|
|
shell: bash
|
|
env:
|
|
GITHUB_SHA: ${{ env.GITHUB_SHA }}
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=$GITHUB_SHA" >> $GITHUB_ENV
|
|
- name: Create folder for storing images
|
|
run: |
|
|
sudo mkdir -p /images
|
|
sudo chmod 777 /images
|
|
- name: Configure images folder for caching
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: /images
|
|
key: ${{ env.BRANCH }}-${{ github.run_id }}-${{ github.run_number }}
|
|
- name: Load docker images
|
|
run: docker load -i /images/images.tar.gz
|
|
- name: Install python packages
|
|
run: python3 -m pip install -r tests/requirements.txt
|
|
- name: Copy all certs
|
|
run: sudo -- sh -c 'mkdir -p /mailu && cp -r tests/certs /mailu && chmod 600 /mailu/certs/*'
|
|
- name: Test core suite
|
|
run: python tests/compose/test.py core 2
|
|
env:
|
|
MAILU_VERSION: ${{ env.MAILU_VERSION }}
|
|
PINNED_MAILU_VERSION: ${{ env.PINNED_MAILU_VERSION }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
|
|
test-fetchmail:
|
|
name: Perform fetchmail tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
#For branch TESTING, we set the image tag to PR-xxxx
|
|
- name: Derive MAILU_VERSION and PINNED_MAILU_VERSION for branch testing
|
|
if: ${{ env.BRANCH == 'testing' }}
|
|
shell: bash
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
run: |
|
|
echo "MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "PINNED_MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG_TESTS" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION for other branches than testing
|
|
if: ${{ env.BRANCH != 'testing' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for staging
|
|
if: ${{ env.BRANCH == 'staging' }}
|
|
shell: bash
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=staging" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for master
|
|
if: ${{ env.BRANCH == 'master' }}
|
|
shell: bash
|
|
env:
|
|
GITHUB_SHA: ${{ env.GITHUB_SHA }}
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=$GITHUB_SHA" >> $GITHUB_ENV
|
|
- name: Create folder for storing images
|
|
run: |
|
|
sudo mkdir -p /images
|
|
sudo chmod 777 /images
|
|
- name: Configure images folder for caching
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: /images
|
|
key: ${{ env.BRANCH }}-${{ github.run_id }}-${{ github.run_number }}
|
|
- name: Load docker images
|
|
run: docker load -i /images/images.tar.gz
|
|
- name: Install python packages
|
|
run: python3 -m pip install -r tests/requirements.txt
|
|
- name: Copy all certs
|
|
run: sudo -- sh -c 'mkdir -p /mailu && cp -r tests/certs /mailu && chmod 600 /mailu/certs/*'
|
|
- name: Test fetch
|
|
run: python tests/compose/test.py fetchmail 2
|
|
env:
|
|
MAILU_VERSION: ${{ env.MAILU_VERSION }}
|
|
PINNED_MAILU_VERSION: ${{ env.PINNED_MAILU_VERSION }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
|
|
test-filters:
|
|
name: Perform filter tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
#For branch TESTING, we set the image tag to PR-xxxx
|
|
- name: Derive MAILU_VERSION and PINNED_MAILU_VERSION for branch testing
|
|
if: ${{ env.BRANCH == 'testing' }}
|
|
shell: bash
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
run: |
|
|
echo "MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "PINNED_MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG_TESTS" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION for other branches than testing
|
|
if: ${{ env.BRANCH != 'testing' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for staging
|
|
if: ${{ env.BRANCH == 'staging' }}
|
|
shell: bash
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=staging" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for master
|
|
if: ${{ env.BRANCH == 'master' }}
|
|
shell: bash
|
|
env:
|
|
GITHUB_SHA: ${{ env.GITHUB_SHA }}
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=$GITHUB_SHA" >> $GITHUB_ENV
|
|
- name: Create folder for storing images
|
|
run: |
|
|
sudo mkdir -p /images
|
|
sudo chmod 777 /images
|
|
- name: Configure images folder for caching
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: /images
|
|
key: ${{ env.BRANCH }}-${{ github.run_id }}-${{ github.run_number }}
|
|
- name: Load docker images
|
|
run: docker load -i /images/images.tar.gz
|
|
- name: Install python packages
|
|
run: python3 -m pip install -r tests/requirements.txt
|
|
- name: Copy all certs
|
|
run: sudo -- sh -c 'mkdir -p /mailu && cp -r tests/certs /mailu && chmod 600 /mailu/certs/*'
|
|
- name: Test clamvav
|
|
run: python tests/compose/test.py filters 3
|
|
env:
|
|
MAILU_VERSION: ${{ env.MAILU_VERSION }}
|
|
PINNED_MAILU_VERSION: ${{ env.PINNED_MAILU_VERSION }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
|
|
test-rainloop:
|
|
name: Perform rainloop tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
#For branch TESTING, we set the image tag to PR-xxxx
|
|
- name: Derive MAILU_VERSION and PINNED_MAILU_VERSION for branch testing
|
|
if: ${{ env.BRANCH == 'testing' }}
|
|
shell: bash
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
run: |
|
|
echo "MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "PINNED_MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG_TESTS" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION for other branches than testing
|
|
if: ${{ env.BRANCH != 'testing' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for staging
|
|
if: ${{ env.BRANCH == 'staging' }}
|
|
shell: bash
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=staging" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for master
|
|
if: ${{ env.BRANCH == 'master' }}
|
|
shell: bash
|
|
env:
|
|
GITHUB_SHA: ${{ env.GITHUB_SHA }}
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=$GITHUB_SHA" >> $GITHUB_ENV
|
|
- name: Create folder for storing images
|
|
run: |
|
|
sudo mkdir -p /images
|
|
sudo chmod 777 /images
|
|
- name: Configure images folder for caching
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: /images
|
|
key: ${{ env.BRANCH }}-${{ github.run_id }}-${{ github.run_number }}
|
|
- name: Load docker images
|
|
run: docker load -i /images/images.tar.gz
|
|
- name: Install python packages
|
|
run: python3 -m pip install -r tests/requirements.txt
|
|
- name: Copy all certs
|
|
run: sudo -- sh -c 'mkdir -p /mailu && cp -r tests/certs /mailu && chmod 600 /mailu/certs/*'
|
|
- name: Test rainloop
|
|
run: python tests/compose/test.py rainloop 2
|
|
env:
|
|
MAILU_VERSION: ${{ env.MAILU_VERSION }}
|
|
PINNED_MAILU_VERSION: ${{ env.PINNED_MAILU_VERSION }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
|
|
test-roundcube:
|
|
name: Perform roundcube tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
#For branch TESTING, we set the image tag to PR-xxxx
|
|
- name: Derive MAILU_VERSION and PINNED_MAILU_VERSION for branch testing
|
|
if: ${{ env.BRANCH == 'testing' }}
|
|
shell: bash
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
run: |
|
|
echo "MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "PINNED_MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG_TESTS" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION for other branches than testing
|
|
if: ${{ env.BRANCH != 'testing' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for staging
|
|
if: ${{ env.BRANCH == 'staging' }}
|
|
shell: bash
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=staging" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for master
|
|
if: ${{ env.BRANCH == 'master' }}
|
|
shell: bash
|
|
env:
|
|
GITHUB_SHA: ${{ env.GITHUB_SHA }}
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=$GITHUB_SHA" >> $GITHUB_ENV
|
|
- name: Create folder for storing images
|
|
run: |
|
|
sudo mkdir -p /images
|
|
sudo chmod 777 /images
|
|
- name: Configure images folder for caching
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: /images
|
|
key: ${{ env.BRANCH }}-${{ github.run_id }}-${{ github.run_number }}
|
|
- name: Load docker images
|
|
run: docker load -i /images/images.tar.gz
|
|
- name: Install python packages
|
|
run: python3 -m pip install -r tests/requirements.txt
|
|
- name: Copy all certs
|
|
run: sudo -- sh -c 'mkdir -p /mailu && cp -r tests/certs /mailu && chmod 600 /mailu/certs/*'
|
|
- name: Test roundcube
|
|
run: python tests/compose/test.py roundcube 2
|
|
env:
|
|
MAILU_VERSION: ${{ env.MAILU_VERSION }}
|
|
PINNED_MAILU_VERSION: ${{ env.PINNED_MAILU_VERSION }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
|
|
test-webdav:
|
|
name: Perform webdav tests
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
#For branch TESTING, we set the image tag to PR-xxxx
|
|
- name: Derive MAILU_VERSION and PINNED_MAILU_VERSION for branch testing
|
|
if: ${{ env.BRANCH == 'testing' }}
|
|
shell: bash
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
run: |
|
|
echo "MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "PINNED_MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG_TESTS" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION for other branches than testing
|
|
if: ${{ env.BRANCH != 'testing' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for staging
|
|
if: ${{ env.BRANCH == 'staging' }}
|
|
shell: bash
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=staging" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for master
|
|
if: ${{ env.BRANCH == 'master' }}
|
|
shell: bash
|
|
env:
|
|
GITHUB_SHA: ${{ env.GITHUB_SHA }}
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=$GITHUB_SHA" >> $GITHUB_ENV
|
|
- name: Create folder for storing images
|
|
run: |
|
|
sudo mkdir -p /images
|
|
sudo chmod 777 /images
|
|
- name: Configure images folder for caching
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: /images
|
|
key: ${{ env.BRANCH }}-${{ github.run_id }}-${{ github.run_number }}
|
|
- name: Load docker images
|
|
run: docker load -i /images/images.tar.gz
|
|
- name: Install python packages
|
|
run: python3 -m pip install -r tests/requirements.txt
|
|
- name: Copy all certs
|
|
run: sudo -- sh -c 'mkdir -p /mailu && cp -r tests/certs /mailu && chmod 600 /mailu/certs/*'
|
|
- name: Test webdav
|
|
run: python tests/compose/test.py webdav 2
|
|
env:
|
|
MAILU_VERSION: ${{ env.MAILU_VERSION }}
|
|
PINNED_MAILU_VERSION: ${{ env.PINNED_MAILU_VERSION }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
|
|
deploy:
|
|
name: Deploy images
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build
|
|
- test-core
|
|
- test-fetchmail
|
|
- test-filters
|
|
- test-rainloop
|
|
- test-roundcube
|
|
- test-webdav
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
#For branch TESTING, we set the image tag to PR-xxxx
|
|
- name: Derive MAILU_VERSION and PINNED_MAILU_VERSION for branch testing
|
|
if: ${{ env.BRANCH == 'testing' }}
|
|
shell: bash
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
DOCKER_ORG_TESTS: ${{ secrets.DOCKER_ORG_TESTS }}
|
|
run: |
|
|
echo "MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "PINNED_MAILU_VERSION=pr-${COMMIT_MESSAGE//[!0-9]/}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG_TESTS" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION for other branches than testing
|
|
if: ${{ env.BRANCH != 'testing' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for staging
|
|
if: ${{ env.BRANCH == 'staging' }}
|
|
shell: bash
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=staging" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for master
|
|
if: ${{ env.BRANCH == 'master' }}
|
|
shell: bash
|
|
env:
|
|
GITHUB_SHA: ${{ env.GITHUB_SHA }}
|
|
run: |
|
|
echo "PINNED_MAILU_VERSION=$GITHUB_SHA" >> $GITHUB_ENV
|
|
- name: Create folder for storing images
|
|
run: |
|
|
sudo mkdir -p /images
|
|
sudo chmod 777 /images
|
|
- name: Configure images folder for caching
|
|
# For staging we do not deploy images. So we do not have to load them from cache.
|
|
if: ${{ env.BRANCH != 'staging' }}
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: /images
|
|
key: ${{ env.BRANCH }}-${{ github.run_id }}-${{ github.run_number }}
|
|
- name: Load docker images
|
|
if: ${{ env.BRANCH != 'staging' }}
|
|
run: docker load -i /images/images.tar.gz
|
|
- name: Deploy built docker images
|
|
env:
|
|
DOCKER_UN: ${{ secrets.Docker_Login }}
|
|
DOCKER_PW: ${{ secrets.Docker_Password }}
|
|
DOCKER_ORG: ${{ env.DOCKER_ORG }}
|
|
MAILU_VERSION: ${{ env.MAILU_VERSION }}
|
|
PINNED_MAILU_VERSION: ${{ env.PINNED_MAILU_VERSION }}
|
|
BRANCH: ${{ env.BRANCH }}
|
|
run: bash tests/deploy.sh
|
|
|
|
tag-release:
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- deploy
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
# fetch-depth 0 is required to also retrieve all tags.
|
|
fetch-depth: 0
|
|
- name: Extract branch name
|
|
shell: bash
|
|
run: |
|
|
echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
|
- name: Derive MAILU_VERSION amd DOCKER_ORG
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'staging' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
env:
|
|
DOCKER_ORG: ${{ secrets.DOCKER_ORG }}
|
|
run: |
|
|
echo "MAILU_VERSION=${{ env.BRANCH }}" >> $GITHUB_ENV
|
|
echo "DOCKER_ORG=$DOCKER_ORG" >> $GITHUB_ENV
|
|
- name: Derive PINNED_MAILU_VERSION for normal release x.y
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'staging' && env.BRANCH != 'master' }}
|
|
shell: bash
|
|
run: |
|
|
version=$( git tag --sort=version:refname --list "${{ env.MAILU_VERSION }}.*" | tail -1 );root_version=${version%.*};patch_version=${version##*.};if [ "$patch_version" == "" ]; then pinned_version=${{ env.MAILU_VERSION }}.0; else pinned_version=$root_version.$(expr $patch_version + 1); fi;echo "PINNED_MAILU_VERSION=$pinned_version" >> $GITHUB_ENV
|
|
- name: Create tag for branch x.y.
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'staging' && env.BRANCH != 'master' && env.PINNED_MAILU_VERSION != '' }}
|
|
shell: bash
|
|
run: |
|
|
echo git tag ${{ env.PINNED_MAILU_VERSION }} $(/usr/bin/git rev-parse HEAD)
|
|
git tag ${{ env.PINNED_MAILU_VERSION }} $(/usr/bin/git rev-parse HEAD)
|
|
git push origin ${{ env.PINNED_MAILU_VERSION }}
|
|
- name: Create release for tag x.y.z.
|
|
if: ${{ env.BRANCH != 'testing' && env.BRANCH != 'staging' && env.BRANCH != 'master' && env.PINNED_MAILU_VERSION != '' }}
|
|
uses: ncipollo/release-action@v1
|
|
with:
|
|
bodyFile: "RELEASE_TEMPLATE.md"
|
|
tag: ${{ env.PINNED_MAILU_VERSION }}
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# This job is watched by bors. It only complets if building,testing and deploy worked.
|
|
ci-success:
|
|
name: CI-Done
|
|
#Returns true when none of the **previous** steps have failed or have been canceled.
|
|
if: ${{ success() }}
|
|
needs:
|
|
- deploy
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: CI/CD succeeded.
|
|
run: exit 0
|