summaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
blob: b822c2df001e3ec4881c9a439b367047d64cd857 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
name: Build

on:
  pull_request:
    branches: [master]
  push:
    branches: [master]

jobs:
  build:
    name: Build (Java ${{ matrix.java }})
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        java: [11, 17]
        include:
          - os: windows-latest
            java: 17
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@v1
      - name: Set up JDK
        uses: actions/setup-java@v2
        with:
          distribution: 'zulu'
          java-version: ${{ matrix.java }}
      - name: Build with Gradle
        uses: gradle/gradle-build-action@v2
        with:
          arguments: build codeCoverageReport
          # Only write to the cache for builds on the 'main' branch.
          # Builds on other branches will only read existing entries from the cache.
          cache-read-only: ${{ github.ref != 'refs/heads/main' }}
      - name: Publish report
        if: always()
        uses: mikepenz/action-junit-report@v2
        with:
          check_name: test (Java ${{ matrix.java }})
          report_paths: '**/build/test-results/test/TEST-*.xml'
          github_token: ${{ secrets.GITHUB_TOKEN }}
      - name: Upload artifacts
        if: always()
        continue-on-error: true # See https://github.com/actions/upload-artifact/issues/270
        uses: actions/upload-artifact@v2
        with:
          name: reports-${{ matrix.os }}-jdk${{ matrix.java }}
          path: |
            ./**/build/reports/**/*
            ./**/build/test-results/**/*
          retention-days: 5
      - name: Upload code coverage
        uses: codecov/codecov-action@v2
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: ./build/reports/jacoco/report.xml
          flags: simulator
  build-api:
    name: Build API (Python ${{ matrix.python }})
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        python: [3.9]
    defaults:
      run:
        working-directory: opendc-web/opendc-web-api
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v3
        with:
          python-version: ${{ matrix.python }}
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      - name: Lint with pylint
        run: ./check.sh
      - name: Test with pytest
        run: pytest --cov --cov-report=xml --junitxml=junit-report.xml
      - name: Publish report
        if: always()
        uses: mikepenz/action-junit-report@v2
        with:
          check_name: test (Python ${{ matrix.python }})
          report_paths: '**/junit-report.xml'
          github_token: ${{ secrets.GITHUB_TOKEN }}
      - name: Upload code coverage
        uses: codecov/codecov-action@v2
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: opendc-web/opendc-web-api/coverage.xml
          flags: api
  build-ui:
    name: Build UI (Node ${{ matrix.node }})
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        node: [16]
    defaults:
      run:
        working-directory: opendc-web/opendc-web-ui
    steps:
      - uses: actions/checkout@v2
      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
      - run: yarn install --frozen-lockfile
      - run: yarn build
        env:
          CI: true
      - run: yarn next lint
        env:
          CI: true