aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/ci.yml
blob: bb7614f8a72cc89759e0f9b3c8d315ba3961691b (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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
name: Continuous Integration

on:
  push:
    paths-ignore:
      - '**/*.md'
  pull_request:
    paths-ignore:
      - 'doc/**'
      - 'contrib/**'
      - '**/*.md'

jobs:
  build:
    name: ${{ matrix.name }}

    env:
      MAKEJOBS: "-j3"
      CHECK_DOC: "0"
      CCACHE_SIZE: "100M"
      CCACHE_TEMPDIR: /tmp/.ccache-temp
      CCACHE_COMPRESS: "1"
      PYTHON_DEBUG: "1"
      WINEDEBUG: fixme-all
      SDK_URL: https://bitcoincore.org/depends-sources/sdks

    strategy:
      fail-fast: false
      matrix:
        name:
          - armhf-linux
          - i686-linux
          - i686-win
          - x86_64-linux-dbg
          - x86_64-linux-nowallet
          - x86_64-macos
          - x86_64-win
        include:
          - name: i686-linux
            host: i686-pc-linux-gnu
            os: ubuntu-20.04
            packages: g++-multilib bc python3-zmq
            run-tests: true
            dep-opts: "NO_QT=1"
            config-opts: "--enable-zmq --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++"
            goal: install
          - name: armhf-linux
            host: arm-linux-gnueabihf
            os: ubuntu-20.04
            packages: g++-arm-linux-gnueabihf
            run-tests: false
            dep-opts: "NO_QT=1"
            config-opts: "--enable-glibc-back-compat --enable-reduce-exports --disable-tests"
            goal: install
          - name: x86_64-linux-nowallet
            host: x86_64-unknown-linux-gnu
            os: ubuntu-20.04
            packages: python3
            run-tests: true
            dep-opts: "NO_WALLET=1"
            config-opts: "--enable-gui=qt5 --enable-glibc-back-compat --enable-reduce-exports --disable-wallet"
            goal: install
          - name: x86_64-linux-dbg
            host: x86_64-unknown-linux-gnu
            os: ubuntu-20.04
            packages: bc python3-zmq
            run-tests: true
            dep-opts: "DEBUG=1"
            config-opts: "--enable-gui=qt5 --enable-zmq --enable-glibc-back-compat --enable-reduce-exports CPPFLAGS=-DDEBUG_LOCKORDER"
            goal: install
          - name: i686-win
            host: i686-w64-mingw32
            arch: "i386"
            os: ubuntu-20.04
            packages: python3 nsis g++-mingw-w64-i686 wine bc wine-binfmt
            postinstall: |
              sudo update-alternatives --set i686-w64-mingw32-gcc /usr/bin/i686-w64-mingw32-gcc-posix
              sudo update-alternatives --set i686-w64-mingw32-g++  /usr/bin/i686-w64-mingw32-g++-posix
              sudo update-binfmts --import /usr/share/binfmts/wine
            run-tests: true
            dep-opts: ""
            config-opts: "--enable-reduce-exports --enable-gui=qt5"
            goal: install
          - name: x86_64-win
            host: x86_64-w64-mingw32
            arch: "i386"
            os: ubuntu-20.04
            packages: python3 nsis g++-mingw-w64-x86-64 wine64 bc wine-binfmt
            postinstall: |
              sudo update-alternatives --set x86_64-w64-mingw32-gcc  /usr/bin/x86_64-w64-mingw32-gcc-posix
              sudo update-alternatives --set x86_64-w64-mingw32-g++  /usr/bin/x86_64-w64-mingw32-g++-posix
              sudo update-binfmts --import /usr/share/binfmts/wine
            run-tests: true
            dep-opts: ""
            config-opts: "--enable-reduce-exports --enable-gui=qt5"
            goal: install
          - name: x86_64-macos
            host: x86_64-apple-darwin11
            os: ubuntu-18.04
            packages: cmake imagemagick libcap-dev librsvg2-bin libz-dev libtiff-tools libtinfo5 python3-setuptools xorriso libtinfo5
            run-tests: false
            dep-opts: ""
            config-opts: "--enable-gui=qt5 --enable-reduce-exports"
            goal: deploy
            sdk: 10.11

    runs-on: ${{ matrix.os }}

    steps:
      - name: Add architecture
        if: ${{ matrix.arch }}
        run: |
          sudo dpkg --add-architecture "${{ matrix.arch }}"

      - name: Install packages
        run: |
          sudo apt-get update
          sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates ccache python3 rsync git procps bison
          sudo apt-get install ${{ matrix.packages }}

      - name: Post install
        if: ${{ matrix.postinstall }}
        run: ${{ matrix.postinstall }}

      - name: Checkout
        uses: actions/checkout@v2

      - name: SDK cache
        if: ${{ matrix.sdk }}
        uses: actions/cache@v2
        env:
          cache-name: sdk
        with:
          path: ./depends/sdk-sources
          key: ${{ matrix.name }}-${{ env.cache-name }}

      - name: Install SDK
        if: ${{ matrix.sdk }}
        run: |
          mkdir -p ./depends/sdk-sources
          mkdir -p ./depends/SDKs
          curl --location --fail $SDK_URL/MacOSX${{ matrix.sdk }}.sdk.tar.gz -o depends/sdk-sources/MacOSX${{ matrix.sdk }}.sdk.tar.gz
          tar -C depends/SDKs -xf depends/sdk-sources/MacOSX${{ matrix.sdk }}.sdk.tar.gz

      - name: Dependency cache
        uses: actions/cache@v2
        env:
          cache-name: depends
        with:
          path: ./depends/built
          key: ${{ matrix.name }}-${{ env.cache-name }}-${{ hashFiles('depends/packages/*') }}

      - name: Build depends
        run: |
          make $MAKEJOBS -C depends HOST=${{ matrix.host }} ${{ matrix.dep-opts }}

      - name: CCache
        uses: actions/cache@v2
        env:
          cache-name: ccache
        with:
          path: ~/.ccache
          key: ${{ matrix.name }}-${{ env.cache-name }}-${{ hashFiles('**/configure.ac') }}

      - name: Build Dogecoin
        run: |
          depends/${{ matrix.host }}/native/bin/ccache --max-size=$CCACHE_SIZE
          ./autogen.sh
          ./configure --prefix=`pwd`/depends/${{ matrix.host }} ${{ matrix.config-opts }} || ( cat config.log && false)
          make $MAKEJOBS ${{ matrix.goal }} || ( echo "Build failure. Verbose build follows." && make ${{ matrix.goal }} V=1 ; false )

      - name: Run tests
        if: ${{ matrix.run-tests }}
        run: |
          make check $MAKEJOBS VERBOSE=1
          qa/pull-tester/install-deps.sh
          qa/pull-tester/rpc-tests.py --coverage

      - name: Upload artifacts
        uses: actions/upload-artifact@v2
        with:
          name: dogecoin-${{ github.sha }}-${{ matrix.name }}
          path: |
            depends/${{ matrix.host }}/bin/dogecoin*
            dist/Dogecoin-Qt.app