summaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
blob: ff1ee85faa2d6eaac3e78b888b174c6f53a00433 (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
120
121
122
123
124
125
126
127
128
129
130
131
name: Build

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

jobs:
  build-simulator:
    name: Build Simulator (Java ${{ matrix.java }})
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        java: [8, 16]
        include:
          - os: windows-latest
            java: 16
    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@v1
        with:
          java-version: ${{ matrix.java }}
      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
      - uses: actions/cache@v2
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-${{ matrix.java }}-gradle-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-${{ matrix.java }}-gradle-
      - name: Build with Gradle
        run: ./gradlew classes
      - name: Check with Gradle
        run: ./gradlew check codeCoverageReport
      - name: Cleanup Gradle Daemons
        run: ./gradlew --stop
      - name: Cleanup Gradle Cache
        run: |
          rm -f ~/.gradle/caches/modules-2/modules-2.lock
          rm -f ~/.gradle/caches/modules-2/gc.properties
        shell: bash
      - 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()
        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@v1
        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@v2
        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@v1
        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