cozy-labs/cozy-desktop

View on GitHub
.github/workflows/linux.yaml

Summary

Maintainability
Test Coverage
name: Linux

# To debug a job, add the following step:
# - name: Debug with tmate
#   uses: mxschmitt/action-tmate@v3

on:
  push:
    branches:
      - master
  pull_request:
    paths-ignore:
      - '.github/workflows/macos.yaml'

env:
  COZY_DESKTOP_DIR: "${{ github.workspace }}/cozy-desktop"
  COZY_STACK_STORAGE: "${{ github.workspace }}/storage"
  COZY_URL: "http://cozy.localhost:8080"
  COZY_PASSPHRASE: "cozy"
  GO111MODULE: "on"
  NODE_ENV: "test"
  COZY_DESKTOP_HEARTBEAT: "1000"
  DISPLAY: ":99.0"
  NODE_VERSION: "18.12.1"
  GO_VERSION: "1.19"
  COUCHDB_VERSION: "3.2.2"
  COUCHDB_USER: "admin"
  COUCHDB_PASSWORD: "password"

jobs:
  cancel:
    name: 'Cancel Previous Runs'
    runs-on: ubuntu-20.04
    timeout-minutes: 3
    steps:
      - uses: styfle/cancel-workflow-action@5df4e62aed82ea1f787d2a02ab3dbfcaa49ffdd1

  unit:
    needs: cancel
    runs-on: ubuntu-20.04
    name: Lint & Unit tests
    steps:
      - uses: actions/checkout@v3
      - name: Cache node modules
        id: cache-node-modules
        uses: actions/cache@v3
        env:
          cache-name: cache-node-modules
        with:
          path: |
            ${{ github.workspace }}/node_modules
            ~/.cache/electron
            ~/.cache/electron-builder
          key: ${{ runner.os }}-v${{ env.NODE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('yarn.lock') }}
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Setup golang
        uses: actions/setup-go@v3
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: Setup CouchDB
        id: setup-couchdb
        uses: 'taratatach/couchdb-action@v4.6-dev'
        with:
          couchdb version: ${{ env.COUCHDB_VERSION }}
          couchdb user: ${{ env.COUCHDB_USER }}
          couchdb password: ${{ env.COUCHDB_PASSWORD }}
      - name: Setup cozy-stack
        uses: ./.github/actions/setup-cozy-stack
        with:
          couchdb-url: ${{ steps.setup-couchdb.outputs.couchdb-url }}
      - name: Setup local env
        run: |
          mkdir -p "$COZY_DESKTOP_DIR"
          echo "NODE_ENV=test" > "${{ github.workspace }}/.env.test"
      - name: Install dependencies
        if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }}
        run: yarn install
      - name: Rebuild native plugins
        run: yarn install:electron
      - name: Start Xvfb
        run: sudo Xvfb :99 -ac -screen 0 1024x768x8 &
      - name: Build elm
        run: yarn build:elm
      - name: Lint
        run: yarn lint
      - name: Elm tests
        run: yarn test:elm
      - name: World tests
        run: yarn test:world --forbid-only
      - name: Unit tests
        run: yarn test:unit --forbid-only

  integration:
    needs: cancel
    runs-on: ubuntu-20.04
    name: Integration tests
    steps:
      - uses: actions/checkout@v3
      - name: Cache node modules
        id: cache-node-modules
        uses: actions/cache@v3
        env:
          cache-name: cache-node-modules
        with:
          path: |
            ${{ github.workspace }}/node_modules
            ~/.cache/electron
            ~/.cache/electron-builder
          key: ${{ runner.os }}-v${{ env.NODE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('yarn.lock') }}
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Setup golang
        uses: actions/setup-go@v3
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: Setup CouchDB
        id: setup-couchdb
        uses: 'taratatach/couchdb-action@v4.6-dev'
        with:
          couchdb version: ${{ env.COUCHDB_VERSION }}
          couchdb user: ${{ env.COUCHDB_USER }}
          couchdb password: ${{ env.COUCHDB_PASSWORD }}
      - name: Setup cozy-stack
        uses: ./.github/actions/setup-cozy-stack
        with:
          couchdb-url: ${{ steps.setup-couchdb.outputs.couchdb-url }}
      - name: Setup local env
        run: |
          mkdir -p "$COZY_DESKTOP_DIR"
          echo "NODE_ENV=test" > "${{ github.workspace }}/.env.test"
      - name: Install dependencies
        if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }}
        run: yarn install
      - name: Rebuild native plugins
        run: yarn install:electron
      - name: Start Xvfb
        run: sudo Xvfb :99 -ac -screen 0 1024x768x8 &
      - name: Integration tests
        run: yarn test:integration --forbid-only

  scenarios:
    needs: cancel
    runs-on: ubuntu-20.04
    name: Scenarios
    strategy:
      matrix:
        stopped_client: ['', 'STOPPED']
      fail-fast: false
    steps:
      - uses: actions/checkout@v3
      - name: Cache node modules
        id: cache-node-modules
        uses: actions/cache@v3
        env:
          cache-name: cache-node-modules
        with:
          path: |
            ${{ github.workspace }}/node_modules
            ~/.cache/electron
            ~/.cache/electron-builder
          key: ${{ runner.os }}-v${{ env.NODE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('yarn.lock') }}
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Setup golang
        uses: actions/setup-go@v3
        with:
          go-version: ${{ env.GO_VERSION }}
      - name: Setup CouchDB
        id: setup-couchdb
        uses: 'taratatach/couchdb-action@v4.6-dev'
        with:
          couchdb version: ${{ env.COUCHDB_VERSION }}
          couchdb user: ${{ env.COUCHDB_USER }}
          couchdb password: ${{ env.COUCHDB_PASSWORD }}
      - name: Setup cozy-stack
        uses: ./.github/actions/setup-cozy-stack
        with:
          couchdb-url: ${{ steps.setup-couchdb.outputs.couchdb-url }}
      - name: Setup local env
        run: |
          mkdir -p "$COZY_DESKTOP_DIR"
          echo "NODE_ENV=test" > "${{ github.workspace }}/.env.test"
      - name: Install dependencies
        if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }}
        run: yarn install
      - name: Rebuild native plugins
        run: yarn install:electron
      - name: Start Xvfb
        run: sudo Xvfb :99 -ac -screen 0 1024x768x8 &
      - name: Scenarios
        env:
            STOPPED_CLIENT: ${{ matrix.stopped_client == 'STOPPED' }}
        run: yarn test:scenarios --forbid-only

  build:
    needs: cancel
    runs-on: ubuntu-20.04
    name: Build packages
    steps:
      - uses: actions/checkout@v3
      - name: Cache node modules
        id: cache-node-modules
        uses: actions/cache@v3
        env:
          cache-name: cache-node-modules
        with:
          path: |
            ${{ github.workspace }}/node_modules
            ~/.cache/electron
            ~/.cache/electron-builder
          key: ${{ runner.os }}-v${{ env.NODE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('yarn.lock') }}
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Install dependencies
        if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }}
        run: yarn install:all
      - name: Build assets
        run: yarn build
      - name: Build packages
        uses: ./.github/actions/build-and-publish
        with:
          gh-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Save artifacts
        if: ${{ github.event_name == 'pull_request' }}
        uses: actions/upload-artifact@v3
        with:
            name: Binaries
            path: |
                ${{ github.workspace }}/dist/latest-linux.yml
                ${{ github.workspace }}/dist/Cozy[- ]Drive[- ]*.AppImage
            retention-days: 5