Skip to content

wip

wip #298

Workflow file for this run

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:
branches:
- '2024.3.x-feature-package-linking'
# 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
# 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-${{ 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/'
# 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-${{ 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: |
js_line=$(cat package.json | grep -n '"@cortezaproject/corteza-js"' | cut -d : -f 1)
awk -v ln="$js_line" 'NR==ln {$0 = " \"@cortezaproject/corteza-js\": \"file:../../../lib/js\","} 1' package.json > package.temp.json && mv package.temp.json package.json
vue_line=$(cat package.json | grep -n '"@cortezaproject/corteza-vue"' | cut -d : -f 1)
awk -v ln="$vue_line" 'NR==ln {$0 = " \"@cortezaproject/corteza-vue\": \"file:../../../lib/vue\","} 1' package.json > package.temp.json && mv package.temp.json package.json
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
# needs: [ notify ]
# 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 }}