v2023.9.3-rc.1 #276
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Release" | |
# These jobs can be tested with nektos/act tool | |
# https://github.com/nektos/act | |
# | |
# Look for "!env.ACT" in the DRY_RUN expression below | |
on: | |
push: | |
tags: | |
- '**' | |
env: | |
BUILD_OS: linux | |
BUILD_ARCH: amd64 | |
GO_VERSION: 1.19 | |
GOFLAGS: -mod=readonly | |
NODE_VERSION: 16 | |
RELEASE_BASE_URL: "https://releases.cortezaproject.org/files" | |
SASS_VERSION: 1.69.5 | |
jobs: | |
server-test: | |
name: "Server tests" | |
runs-on: ubuntu-20.04 | |
env: | |
GOFLAGS: -mod=readonly | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v3 | |
with: { go-version: "${{ env.GO_VERSION }}" } | |
- name: "Copy language files" | |
working-directory: server/pkg/locale | |
run: make src/en | |
- name: "Unit" | |
working-directory: server | |
run: make test.unit | |
- name: "Store" | |
working-directory: server | |
run: make test.store | |
- name: "Integration" | |
working-directory: server | |
run: make test.integration | |
# Building web console for server and cache it for release-* steps | |
# we'll do this in parallel with tests to gain a few seconds | |
server-web-console-build: | |
name: "Server Web Console Build" | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: { node-version: "${{ env.NODE_VERSION }}" } | |
- uses: actions/cache@v3 | |
if: ${{ !env.ACT }} | |
with: | |
path: ~/.npm | |
key: ${{ runner.OS }}-node-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.OS }}-node- | |
- name: "Setup YARN" | |
run: npm install -g yarn @vue/cli-service | |
- name: "Install dependencies" | |
working-directory: server/webconsole | |
run: yarn install | |
- name: "Build Package" | |
working-directory: server/webconsole | |
run: yarn build | |
- name: "Cache console build" | |
uses: actions/cache@v3 | |
with: { path: ./server/webconsole/dist, key: console-build } | |
server-release: | |
name: "Server Release (${{ matrix.os }})" | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- { runsOn: "ubuntu-20.04", os: "linux" } | |
- { runsOn: "macos-latest", os: "darwin" } | |
runs-on: ${{ matrix.runsOn }} | |
needs: [ server-web-console-build, server-test ] | |
env: | |
BUILD_OS: ${{ matrix.os }} | |
RELEASE_SFTP_KEY: ${{ secrets.RELEASE_SFTP_KEY }} | |
RELEASE_SFTP_URI: ${{ secrets.RELEASE_SFTP_URI }} | |
steps: | |
- run: echo "BUILD_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v3 | |
with: { go-version: "${{ env.GO_VERSION }}" } | |
- name: "Restore web console dist from cache" | |
uses: actions/cache@v3 | |
with: { path: ./server/webconsole/dist, key: console-build } | |
- name: "Copy essentials" | |
run: cp *.md DCO LICENSE server/ | |
- name: "Copy language files" | |
working-directory: server/pkg/locale | |
run: make src/en src/de src/fr | |
- name: "Build" | |
working-directory: server | |
run: make release-clean release | |
- name: "Upload" | |
working-directory: server | |
run: make upload | |
if: ${{ !env.ACT }} | |
######################################################################################################################## | |
######################################################################################################################## | |
# Libs | |
lib-test: | |
name: "Library test (${{ matrix.lib }})" | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
lib: [ "js", "vue" ] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
- uses: actions/cache@v3 | |
if: ${{ !env.ACT }} | |
with: | |
path: ~/.npm | |
key: ${{ runner.OS }}-node-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.OS }}-node-${{ matrix.lib }} | |
- name: "Setup YARN" | |
run: npm install -g yarn @vue/cli-service | |
- name: "Install dependencies" | |
working-directory: lib/${{ matrix.lib }} | |
run: yarn install | |
- name: "Run all tests" | |
working-directory: lib/${{ matrix.lib }} | |
run: yarn test:unit | |
lib-build-and-publish: | |
name: "Publish libraries (${{ matrix.lib }})" | |
runs-on: ubuntu-20.04 | |
needs: [ lib-test ] | |
strategy: | |
matrix: | |
lib: [ "js", "vue" ] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
registry-url: 'https://registry.npmjs.org/' | |
- uses: actions/cache@v3 | |
if: ${{ !env.ACT }} | |
with: | |
path: ~/.npm | |
key: ${{ runner.OS }}-node-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.OS }}-node-${{ matrix.lib }} | |
- name: "Setup YARN" | |
run: npm install -g yarn @vue/cli-service | |
- name: "Install dependencies" | |
working-directory: lib/${{ matrix.lib }} | |
run: yarn install | |
- name: "Build Package" | |
working-directory: lib/${{ matrix.lib }} | |
run: yarn build | |
- name: "Dry Run Publish" | |
working-directory: lib/${{ matrix.lib }} | |
run: npm publish --dry-run | |
# invalid secret? | |
# - name: "Publish" | |
# working-directory: lib/${{ matrix.lib }} | |
# run: npm publish | |
# env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } | |
# if: ${{ !env.ACT }} | |
######################################################################################################################## | |
######################################################################################################################## | |
# Web clients | |
client-web-test: | |
name: "Web client test (${{ matrix.app }})" | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: true | |
matrix: { app: [ admin, compose, discovery, privacy, reporter, one, workflow ] } | |
needs: [ "lib-build-and-publish" ] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: { node-version: "${{ env.NODE_VERSION }}" } | |
- name: "Setup YARN" | |
working-directory: client/web/${{ matrix.app }} | |
run: npm install -g yarn @vue/cli-service | |
- name: "Cache" | |
uses: actions/cache@v3 | |
if: ${{ !env.ACT }} | |
with: | |
path: ~/.npm | |
key: ${{ runner.OS }}-node-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.OS }}-node- | |
- name: "Dependencies" | |
working-directory: client/web/${{ matrix.app }} | |
run: make dep | |
- name: "Tests" | |
working-directory: client/web/${{ matrix.app }} | |
run: make test | |
client-web-release: | |
name: "Web client (${{ matrix.app }})" | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: true | |
matrix: { app: [ admin, compose, discovery, privacy, reporter, one, workflow ] } | |
needs: [ client-web-test ] | |
env: | |
RELEASE_SFTP_KEY: ${{ secrets.RELEASE_SFTP_KEY }} | |
RELEASE_SFTP_URI: ${{ secrets.RELEASE_SFTP_URI }} | |
steps: | |
- run: echo "BUILD_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: { node-version: "${{ env.NODE_VERSION }}" } | |
- name: "Setup YARN" | |
run: npm install -g yarn @vue/cli-service | |
- name: "Cache" | |
uses: actions/cache@v3 | |
if: ${{ !env.ACT }} | |
with: | |
path: ~/.npm | |
key: ${{ runner.OS }}-node-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.OS }}-node- | |
- name: "Dependencies" | |
working-directory: client/web/${{ matrix.app }} | |
run: make dep | |
- name: "Build" | |
working-directory: client/web/${{ matrix.app }} | |
run: make build | |
- name: "Copy essentials" | |
run: cp *.md DCO LICENSE client/web/${{ matrix.app }} | |
- name: "Release" | |
working-directory: client/web/${{ matrix.app }} | |
run: make release | |
- name: "Upload" | |
working-directory: client/web/${{ matrix.app }} | |
run: make upload | |
if: ${{ !env.ACT }} | |
######################################################################################################################## | |
client-web-aio-release: | |
name: "Web clients (all-in-one release)" | |
runs-on: ubuntu-20.04 | |
needs: [ client-web-release ] | |
env: | |
RELEASE_SFTP_KEY: ${{ secrets.RELEASE_SFTP_KEY }} | |
RELEASE_SFTP_URI: ${{ secrets.RELEASE_SFTP_URI }} | |
steps: | |
- uses: actions/checkout@v3 | |
- run: echo "BUILD_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
- name: "Prepare dist dir" | |
run: | | |
mkdir -p \ | |
client/web/dist/admin \ | |
client/web/dist/compose \ | |
client/web/dist/workflow \ | |
client/web/dist/reporter \ | |
client/web/dist/discovery \ | |
client/web/dist/privacy | |
- name: "Download & unpack one" | |
run: | | |
curl --location "${{ env.RELEASE_BASE_URL }}/corteza-webapp-one-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
tar -xzmok -C client/web/dist | |
- name: "Download & unpack admin" | |
run: | | |
curl --silent --location "${{ env.RELEASE_BASE_URL }}/corteza-webapp-admin-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
tar -xzmok -C client/web/dist/admin | |
- name: "Download & unpack compose" | |
run: | | |
curl --silent --location "${{ env.RELEASE_BASE_URL }}/corteza-webapp-compose-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
tar -xzmok -C client/web/dist/compose | |
- name: "Download & unpack workflow" | |
run: | | |
curl --silent --location "${{ env.RELEASE_BASE_URL }}/corteza-webapp-workflow-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
tar -xzmok -C client/web/dist/workflow | |
- name: "Download & unpack reporter" | |
run: | | |
curl --silent --location "${{ env.RELEASE_BASE_URL }}/corteza-webapp-reporter-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
tar -xzmok -C client/web/dist/reporter | |
- name: "Download & unpack discovery" | |
run: | | |
curl --silent --location "${{ env.RELEASE_BASE_URL }}/corteza-webapp-discovery-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
tar -xzmok -C client/web/dist/discovery | |
- name: "Download & unpack privacy" | |
run: | | |
curl --silent --location "${{ env.RELEASE_BASE_URL }}/corteza-webapp-privacy-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
tar -xzmok -C client/web/dist/privacy | |
- name: "Copy essentials" | |
run: cp *.md DCO LICENSE client/web/dist/ | |
- name: "Pack all web clients" | |
working-directory: client/web | |
run: tar -C dist -czf corteza-webapp-${{ env.BUILD_VERSION }}.tar.gz $(dir dist) | |
- name: "Upload" | |
working-directory: client/web | |
run: | | |
echo ${{ env.RELEASE_SFTP_KEY }} | base64 -d > .upload-rsa && chmod 0400 .upload-rsa | |
echo "put corteza-webapp-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
sftp -q -o "StrictHostKeyChecking no" -i .upload-rsa ${{ env.RELEASE_SFTP_URI }} | |
rm -f .upload-rsa | |
if: ${{ !env.ACT }} | |
######################################################################################################################## | |
######################################################################################################################## | |
# This is where it all comes together | |
release: | |
name: "Corteza (${{ matrix.os }})" | |
runs-on: ubuntu-20.04 | |
needs: [ server-release, client-web-aio-release ] | |
strategy: | |
fail-fast: true | |
matrix: | |
os: [ "linux" ] | |
env: | |
ENDPOINT: https://releases.cortezaproject.org/files | |
RELEASE_SFTP_KEY: ${{ secrets.RELEASE_SFTP_KEY }} | |
RELEASE_SFTP_URI: ${{ secrets.RELEASE_SFTP_URI }} | |
steps: | |
- run: echo "BUILD_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
- uses: actions/checkout@v3 | |
- name: "Download" | |
run: | | |
curl --silent --location "${{ env.RELEASE_BASE_URL }}/corteza-server-${{ env.BUILD_VERSION }}-${{ matrix.os }}-amd64.tar.gz" | \ | |
tar -xzmok -C . | |
mv corteza-server dist | |
rm -rf dist/webapp | |
mkdir dist/webapp | |
curl --silent --location "${{ env.RELEASE_BASE_URL }}/corteza-webapp-${{ env.BUILD_VERSION }}.tar.gz" | \ | |
tar -xzmok -C dist/webapp | |
- name: "Pack" | |
run: | | |
tar -C dist -czf corteza-${{ env.BUILD_VERSION }}-linux-amd64.tar.gz $(dir dist) | |
- name: "Upload" | |
run: | | |
echo ${{ env.RELEASE_SFTP_KEY }} | base64 -d > .upload-rsa | |
chmod 0400 .upload-rsa | |
echo "put corteza-${{ env.BUILD_VERSION }}-linux-amd64.tar.gz" | \ | |
sftp -q -o "StrictHostKeyChecking no" -i .upload-rsa ${{ env.RELEASE_SFTP_URI }} | |
rm -f .upload-rsa | |
if: ${{ !env.ACT }} | |
######################################################################################################################## | |
######################################################################################################################## | |
# Discovery | |
extra-server-discovery-test: | |
name: "Discovery Server test" | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: "Placeholder" | |
run: echo "@todo add tests" | |
extra-server-discovery-release: | |
name: "Discovery Server release ${{ matrix.os }}" | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- { runsOn: "ubuntu-20.04", os: "linux" } | |
- { runsOn: "macos-latest", os: "darwin" } | |
runs-on: ${{ matrix.runsOn }} | |
needs: [ extra-server-discovery-test ] | |
env: | |
BUILD_OS: ${{ matrix.os }} | |
BUILD_VERSION: ${{ format(github.ref, 'refs/tags/', '') }} | |
RELEASE_SFTP_KEY: ${{ secrets.RELEASE_SFTP_KEY }} | |
RELEASE_SFTP_URI: ${{ secrets.RELEASE_SFTP_URI }} | |
steps: | |
- run: echo "BUILD_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v3 | |
with: { go-version: "${{ env.GO_VERSION }}" } | |
- name: "Copy essentials" | |
run: cp *.md DCO LICENSE extra/server-discovery/ | |
- name: "Build & release" | |
working-directory: extra/server-discovery/ | |
run: make release-clean release | |
- name: "Upload" | |
working-directory: extra/server-discovery/ | |
run: make upload | |
if: ${{ !env.ACT }} | |
######################################################################################################################## | |
docker-images: | |
name: "Docker image ${{ matrix.image }}" | |
runs-on: ubuntu-20.04 | |
needs: | |
- server-release | |
- client-web-aio-release | |
- extra-server-discovery-release | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- { context: "extra/server-discovery", image: "cortezaproject/corteza-server-discovery" } | |
- { context: "client/web", image: "cortezaproject/corteza-webapp" } | |
- { context: "server", image: "cortezaproject/corteza-server" } | |
- { context: ".", image: "cortezaproject/corteza" } | |
steps: | |
- uses: actions/checkout@v3 | |
- name: "Parse version tag" | |
id: version | |
run: | | |
TAG=${GITHUB_REF#refs/tags/} | |
echo "DOCKER_IMAGE_TAG=${TAG}" >> $GITHUB_ENV | |
if [[ "$(echo ${TAG} | grep '-')" == "" ]]; then | |
# when releasing patched version (YYYY.MM.PATCH) we | |
# tag alias (YYYY.MM) as well | |
echo "DOCKER_IMAGE_ALIAS=$(echo ${TAG} | cut -d '.' -f -2)" >> $GITHUB_ENV | |
fi | |
- name: "Build" | |
run: | | |
docker build \ | |
--build-arg "VERSION=${{ env.DOCKER_IMAGE_TAG }}" \ | |
--build-arg "SASS_VERSION=${{ env.SASS_VERSION }}" \ | |
--tag ${{ matrix.image }}:${{ env.DOCKER_IMAGE_TAG }} \ | |
${{ matrix.context }} | |
- name: "Login" | |
uses: docker/login-action@v2 | |
if: ${{ !env.ACT && env.DOCKER_IMAGE_TAG }} | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: "Push ${{ env.DOCKER_IMAGE_TAG }}" | |
if: ${{ !env.ACT }} | |
run: | | |
docker push \ | |
${{ matrix.image }}:${{ env.DOCKER_IMAGE_TAG }} | |
- name: "Push ${{ env.DOCKER_IMAGE_ALIAS }}" | |
if: ${{ !env.ACT && env.DOCKER_IMAGE_ALIAS }} | |
run: | | |
docker tag \ | |
${{ matrix.image }}:${{ env.DOCKER_IMAGE_TAG }} \ | |
${{ matrix.image }}:${{ env.DOCKER_IMAGE_ALIAS }} | |
docker push \ | |
${{ matrix.image }}:${{ env.DOCKER_IMAGE_ALIAS }} | |
notify: | |
name: "Send matrix release notification" | |
runs-on: ubuntu-20.04 | |
needs: [ docker-images, release ] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: "Parse version tag" | |
id: version | |
run: | | |
TAG=${GITHUB_REF#refs/tags/} | |
echo "DOCKER_IMAGE_TAG=${TAG}" >> $GITHUB_ENV | |
- name: "Send message via Matrix on successful release" | |
if: ${{ !env.ACT }} | |
id: matrix-chat-release-successful | |
uses: fadenb/matrix-chat-message@v0.0.6 | |
with: | |
homeserver: ${{ secrets.MATRIX_HOME_SERVER }} | |
token: ${{ secrets.MATRIX_ACCESS_TOKEN }} | |
channel: ${{ secrets.MATRIX_ROOM_ID }} | |
message: | | |
# Corteza **${{ env.DOCKER_IMAGE_TAG }}** has been successfully released 🎉🎉 | |
- name: "Send message via Matrix on failed release" | |
if: ${{ !env.ACT && failure() }} | |
id: matrix-chat-release-failed | |
uses: fadenb/matrix-chat-message@v0.0.6 | |
with: | |
homeserver: ${{ secrets.MATRIX_HOME_SERVER }} | |
token: ${{ secrets.MATRIX_ACCESS_TOKEN }} | |
channel: ${{ secrets.MATRIX_ROOM_ID }} | |
message: | | |
# Corteza **${{ env.DOCKER_IMAGE_TAG }}** release has failed | |
publish-release-sentry: | |
name: "Publish release to sentry" | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Create Sentry release | |
uses: getsentry/action-release@v1 | |
continue-on-error: true | |
env: | |
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} | |
SENTRY_ORG: ${{ secrets.SENTRY_ORG }} | |
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} | |
with: | |
ignore_empty: true | |
ignore_missing: true | |
version: ${{ github.ref_name }} |