aboutsummaryrefslogtreecommitdiffhomepage
path: root/.github/workflows/benchmark.yml
blob: 86f675432df916da36c82ac5376fb6043fd11d7a (plain) (blame)
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
132
133
134
135
136
137
name: Benchmark

on:
  push:
    branches:
      - ci
  schedule:
    - cron: '0 */12 * * *'

jobs:

  test:
    runs-on: ubuntu-latest

    services:
      redis:
        image: redis
        ports:
          - 6379:6379

      postgres:
        image: postgres:9.6
        ports:
          - 5432:5432
        env:
          POSTGRES_USER: peertube
          POSTGRES_HOST_AUTH_METHOD: trust

    env:
      PGUSER: peertube
      PGHOST: localhost
      NODE_PENDING_JOB_WAIT: 500

    steps:
      - uses: actions/checkout@v2

      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          node-version: '12.x'

      - name: Setup system dependencies
        run: |
          sudo apt-get install postgresql-client-common redis-tools parallel
          wget --quiet --no-check-certificate "https://download.cpy.re/ffmpeg/ffmpeg-release-4.3.1-64bit-static.tar.xz"
          tar xf ffmpeg-release-4.3.1-64bit-static.tar.xz
          mkdir -p $HOME/bin
          cp ffmpeg-*/{ffmpeg,ffprobe} $HOME/bin
          echo "$HOME/bin" >> $GITHUB_PATH

      - name: Cache Node.js modules
        uses: actions/cache@v2
        with:
          path: |
            **/node_modules
          key: ${{ runner.OS }}-node-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.OS }}-node-
            ${{ runner.OS }}-

      - name: Cache fixtures
        uses: actions/cache@v2
        with:
          path: |
            fixtures
          key: ${{ runner.OS }}-fixtures-${{ matrix.test_suite }}-${{ hashFiles('fixtures/*') }}
          restore-keys: |
            ${{ runner.OS }}-fixtures-${{ matrix.test_suite }}-
            ${{ runner.OS }}-fixtures-
            ${{ runner.OS }}-

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Build
        run: |
          startClient=`date +%s`
          npm run build:client
          endClient=`date +%s`
          clientBuildTime=$((endClient-startClient))

          startServer=`date +%s`
          npm run build:server
          endServer=`date +%s`
          serverBuildTime=$((endServer-startServer))

          echo '{"clientBuildTime":'$clientBuildTime',"serverBuildTime":'$serverBuildTime'}'> build-time.json

      - name: Startup
        run: |
          npm run clean:server:test

          startCold=`date +%s%3N`
          NODE_APP_INSTANCE=1 NODE_ENV=test node dist/server --benchmark-startup
          endCold=`date +%s%3N`
          coldStartupTime=$(echo "scale=2; ($endCold-$startCold)/1000" | bc)

          startHot=`date +%s%3N`
          NODE_APP_INSTANCE=1 NODE_ENV=test node dist/server --benchmark-startup
          endHot=`date +%s%3N`
          hotStartupTime=$(echo "scale=2; ($endHot-$startHot)/1000" | bc)

          echo '{"coldStartupTime":'$coldStartupTime',"hotStartupTime":'$hotStartupTime'}'> startup-time.json

      - name: Run benchmark
        run: |
          node dist/scripts/benchmark.js benchmark.json

      - name: Display result
        run: |
          cat benchmark.json build-time.json startup-time.json

      - name: Upload benchmark result
        env:
          STATS_DEPLOYEMENT_KNOWN_HOSTS: ${{ secrets.STATS_DEPLOYEMENT_KNOWN_HOSTS }}
          STATS_DEPLOYEMENT_KEY: ${{ secrets.STATS_DEPLOYEMENT_KEY }}
          STATS_DEPLOYEMENT_USER: ${{ secrets.STATS_DEPLOYEMENT_USER }}
          STATS_DEPLOYEMENT_HOST: ${{ secrets.STATS_DEPLOYEMENT_HOST }}
        run: |
          mkdir -p ~/.ssh
          chmod 700  ~/.ssh
          if [ ! -z ${STATS_DEPLOYEMENT_KNOWN_HOSTS+x} ]; then
            echo "Adding ssh key to known hosts"
            echo -e "${STATS_DEPLOYEMENT_KNOWN_HOSTS}" > ~/.ssh/known_hosts;
          fi

          eval `ssh-agent -s`

          if [ ! -z ${STATS_DEPLOYEMENT_KEY+x} ]; then
            echo "Adding ssh reployement key"
            ssh-add <(echo "${STATS_DEPLOYEMENT_KEY}");
          fi

          if [ ! -z ${STATS_DEPLOYEMENT_KEY+x} ]; then
            echo "Uploading files"
            scp benchmark.json build-time.json startup-time.json ${STATS_DEPLOYEMENT_USER}@${STATS_DEPLOYEMENT_HOST}:../../web/peertube-stats;
          fi