|
| 1 | +name: Test |
| 2 | + |
| 3 | +on: |
| 4 | + pull_request: |
| 5 | + branches: [ master ] |
| 6 | + |
| 7 | +jobs: |
| 8 | + test: |
| 9 | + runs-on: ubuntu-latest |
| 10 | + strategy: |
| 11 | + fail-fast: false |
| 12 | + matrix: |
| 13 | + postgres: |
| 14 | + - '13' |
| 15 | + - '12' |
| 16 | + - '11' |
| 17 | + - '10' |
| 18 | + - '9.6' |
| 19 | + go: |
| 20 | + - '1.17' |
| 21 | + - '1.16' |
| 22 | + - '1.15' |
| 23 | + - '1.14' |
| 24 | + steps: |
| 25 | + - name: setup postgres pre-reqs |
| 26 | + run: | |
| 27 | + mkdir init |
| 28 | + cat <<CONF > init/root.crt |
| 29 | + -----BEGIN CERTIFICATE----- |
| 30 | + MIIEBjCCAu6gAwIBAgIJAPizR+OD14YnMA0GCSqGSIb3DQEBCwUAMF4xCzAJBgNV |
| 31 | + BAYTAlVTMQ8wDQYDVQQIDAZOZXZhZGExEjAQBgNVBAcMCUxhcyBWZWdhczEaMBgG |
| 32 | + A1UECgwRZ2l0aHViLmNvbS9saWIvcHExDjAMBgNVBAMMBXBxIENBMB4XDTIxMDkw |
| 33 | + MjAxNTUwMloXDTMxMDkwMzAxNTUwMlowXjELMAkGA1UEBhMCVVMxDzANBgNVBAgM |
| 34 | + Bk5ldmFkYTESMBAGA1UEBwwJTGFzIFZlZ2FzMRowGAYDVQQKDBFnaXRodWIuY29t |
| 35 | + L2xpYi9wcTEOMAwGA1UEAwwFcHEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw |
| 36 | + ggEKAoIBAQDb9d6sjdU6GdibGrXRMOHREH3MRUS8T4TFqGgPEGVDP/V5bAZlBSGP |
| 37 | + AN0o9DTyVLcbQpBt8zMTw9KeIzIIe5NIVkSmA16lw/YckGhOM+kZIkiDuE6qt5Ia |
| 38 | + OQCRMdXkZ8ejG/JUu+rHU8FJZL8DE+jyYherzdjkeVAQ7JfzxAwW2Dl7T/47g337 |
| 39 | + Pwmf17AEb8ibSqmXyUN7R5NhJQs+hvaYdNagzdx91E1H+qlyBvmiNeasUQljLvZ+ |
| 40 | + Y8wAuU79neA+d09O4PBiYwV17rSP6SZCeGE3oLZviL/0KM9Xig88oB+2FmvQ6Zxa |
| 41 | + L7SoBlqS+5pBZwpH7eee/wCIKAnJtMAJAgMBAAGjgcYwgcMwDwYDVR0TAQH/BAUw |
| 42 | + AwEB/zAdBgNVHQ4EFgQUfIXEczahbcM2cFrwclJF7GbdajkwgZAGA1UdIwSBiDCB |
| 43 | + hYAUfIXEczahbcM2cFrwclJF7GbdajmhYqRgMF4xCzAJBgNVBAYTAlVTMQ8wDQYD |
| 44 | + VQQIDAZOZXZhZGExEjAQBgNVBAcMCUxhcyBWZWdhczEaMBgGA1UECgwRZ2l0aHVi |
| 45 | + LmNvbS9saWIvcHExDjAMBgNVBAMMBXBxIENBggkA+LNH44PXhicwDQYJKoZIhvcN |
| 46 | + AQELBQADggEBABFyGgSz2mHVJqYgX1Y+7P+MfKt83cV2uYDGYvXrLG2OGiCilVul |
| 47 | + oTBG+8omIMSHOsQZvWMpA5H0tnnlQHrKpKpUyKkSL+Wv5GL0UtBmHX7mVRiaK2l4 |
| 48 | + q2BjRaQUitp/FH4NSdXtVrMME5T1JBBZHsQkNL3cNRzRKwY/Vj5UGEDxDS7lILUC |
| 49 | + e01L4oaK0iKQn4beALU+TvKoAHdPvoxpPpnhkF5ss9HmdcvRktJrKZemDJZswZ7/ |
| 50 | + +omx8ZPIYYUH5VJJYYE88S7guAt+ZaKIUlel/t6xPbo2ZySFSg9u1uB99n+jTo3L |
| 51 | + 1rAxFnN3FCX2jBqgP29xMVmisaN5k04UmyI= |
| 52 | + -----END CERTIFICATE----- |
| 53 | + CONF |
| 54 | + cat <<CONF > init/server.crt |
| 55 | + -----BEGIN CERTIFICATE----- |
| 56 | + MIIDqzCCApOgAwIBAgIJAPiewLrOyYipMA0GCSqGSIb3DQEBCwUAMF4xCzAJBgNV |
| 57 | + BAYTAlVTMQ8wDQYDVQQIDAZOZXZhZGExEjAQBgNVBAcMCUxhcyBWZWdhczEaMBgG |
| 58 | + A1UECgwRZ2l0aHViLmNvbS9saWIvcHExDjAMBgNVBAMMBXBxIENBMB4XDTIxMDkw |
| 59 | + MjAxNTUwMloXDTMxMDkwMzAxNTUwMlowTjELMAkGA1UEBhMCVVMxDzANBgNVBAgM |
| 60 | + Bk5ldmFkYTESMBAGA1UEBwwJTGFzIFZlZ2FzMRowGAYDVQQKDBFnaXRodWIuY29t |
| 61 | + L2xpYi9wcTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKf6H4UzmANN |
| 62 | + QiQJe92Mf3ETMYmpZKNNO9DPEHyNLIkag+XwMrBTdcCK0mLvsNCYpXuBN6703KCd |
| 63 | + WAFOeMmj7gOsWtvjt5Xm6bRHLgegekXzcG/jDwq/wyzeDzr/YkITuIlG44Lf9lhY |
| 64 | + FLwiHlHOWHnwrZaEh6aU//02aQkzyX5INeXl/3TZm2G2eIH6AOxOKOU27MUsyVSQ |
| 65 | + 5DE+SDKGcRP4bElueeQWvxAXNMZYb7sVSDdfHI3zr32K4k/tC8x0fZJ5XN/dvl4t |
| 66 | + 4N4MrYlmDO5XOrb/gQH1H4iu6+5EMDfZYab4fkThnNFdfFqu4/8Scv7KZ8mWqpKM |
| 67 | + fGAjEPctQi0CAwEAAaN8MHowHQYDVR0OBBYEFENExPbmDyFB2AJUdbMvVyhlNPD5 |
| 68 | + MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMBMGA1UdEQQMMAqCCHBvc3RncmVzMCwG |
| 69 | + CWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTANBgkq |
| 70 | + hkiG9w0BAQsFAAOCAQEAMRVbV8RiEsmp9HAtnVCZmRXMIbgPGrqjeSwk586s4K8v |
| 71 | + BSqNCqxv6s5GfCRmDYiqSqeuCVDtUJS1HsTmbxVV7Ke71WMo+xHR1ICGKOa8WGCb |
| 72 | + TGsuicG5QZXWaxeMOg4s0qpKmKko0d1aErdVsanU5dkrVS7D6729Ffnzu4lwApk6 |
| 73 | + invAB67p8u7sojwqRq5ce0vRaG+YFylTrWomF9kauEb8gKbQ9Xc7QfX+h+UH/mq9 |
| 74 | + Nvdj8LOHp6/82bZdnsYUOtV4lS1IA/qzeXpqBphxqfWabD1yLtkyJyImZKq8uIPp |
| 75 | + 0CG4jhObPdWcCkXD6bg3QK3mhwlC79OtFgxWmldCRQ== |
| 76 | + -----END CERTIFICATE----- |
| 77 | + CONF |
| 78 | + cat <<CONF > init/server.key |
| 79 | + -----BEGIN PRIVATE KEY----- |
| 80 | + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCn+h+FM5gDTUIk |
| 81 | + CXvdjH9xEzGJqWSjTTvQzxB8jSyJGoPl8DKwU3XAitJi77DQmKV7gTeu9NygnVgB |
| 82 | + TnjJo+4DrFrb47eV5um0Ry4HoHpF83Bv4w8Kv8Ms3g86/2JCE7iJRuOC3/ZYWBS8 |
| 83 | + Ih5Rzlh58K2WhIemlP/9NmkJM8l+SDXl5f902ZthtniB+gDsTijlNuzFLMlUkOQx |
| 84 | + PkgyhnET+GxJbnnkFr8QFzTGWG+7FUg3XxyN8699iuJP7QvMdH2SeVzf3b5eLeDe |
| 85 | + DK2JZgzuVzq2/4EB9R+IruvuRDA32WGm+H5E4ZzRXXxaruP/EnL+ymfJlqqSjHxg |
| 86 | + IxD3LUItAgMBAAECggEAOE2naQ9tIZYw2EFxikZApVcooJrtx6ropMnzHbx4NBB2 |
| 87 | + K4mChAXFj184u77ZxmGT/jzGvFcI6LE0wWNbK0NOUV7hKZk/fPhkV3AQZrAMrAu4 |
| 88 | + IVi7PwAd3JkmA8F8XuebUDA5rDGDsgL8GD9baFJA58abeLs9eMGyuF4XgOUh4bip |
| 89 | + hgHa76O2rcDWNY5HZqqRslw75FzlYkB0PCts/UJxSswj70kTTihyOhDlrm2TnyxI |
| 90 | + ne54UbGRrpfs9wiheSGLjDG81qZToBHQDwoAnjjZhu1VCaBISuGbgZrxyyRyqdnn |
| 91 | + xPW+KczMv04XyvF7v6Pz+bUEppalLXGiXnH5UtWvZQKBgQDTPCdMpNE/hwlq4nAw |
| 92 | + Kf42zIBWfbnMLVWYoeDiAOhtl9XAUAXn76xe6Rvo0qeAo67yejdbJfRq3HvGyw+q |
| 93 | + 4PS8r9gXYmLYIPQxSoLL5+rFoBCN3qFippfjLB1j32mp7+15KjRj8FF2r6xIN8fu |
| 94 | + XatSRsaqmvCWYLDRv/rbHnxwkwKBgQDLkyfFLF7BtwtPWKdqrwOM7ip1UKh+oDBS |
| 95 | + vkCQ08aEFRBU7T3jChsx5GbaW6zmsSBwBwcrHclpSkz7n3aq19DDWObJR2p80Fma |
| 96 | + rsXeIcvtEpkvT3pVX268P5d+XGs1kxgFunqTysG9yChW+xzcs5MdKBzuMPPn7rL8 |
| 97 | + MKAzdar6PwKBgEypkzW8x3h/4Moa3k6MnwdyVs2NGaZheaRIc95yJ+jGZzxBjrMr |
| 98 | + h+p2PbvU4BfO0AqOkpKRBtDVrlJqlggVVp04UHvEKE16QEW3Xhr0037f5cInX3j3 |
| 99 | + Lz6yXwRFLAsR2aTUzWjL6jTh8uvO2s/GzQuyRh3a16Ar/WBShY+K0+zjAoGATnLT |
| 100 | + xZjWnyHRmu8X/PWakamJ9RFzDPDgDlLAgM8LVgTj+UY/LgnL9wsEU6s2UuP5ExKy |
| 101 | + QXxGDGwUhHar/SQTj+Pnc7Mwpw6HKSOmnnY5po8fNusSwml3O9XppEkrC0c236Y/ |
| 102 | + 7EobJO5IFVTJh4cv7vFxTJzSsRL8KFD4uzvh+nMCgYEAqY8NBYtIgNJA2B6C6hHF |
| 103 | + +bG7v46434ZHFfGTmMQwzE4taVg7YRnzYESAlvK4bAP5ZXR90n7GRGFhrXzoMZ38 |
| 104 | + r0bw/q9rV+ReGda7/Bjf7ciCKiq0RODcHtf4IaskjPXCoQRGJtgCPLhWPfld6g9v |
| 105 | + /HTvO96xv9e3eG/PKSPog94= |
| 106 | + -----END PRIVATE KEY----- |
| 107 | + CONF |
| 108 | + cat <<CONF > init/hba.sh |
| 109 | + cat <<EOF > /var/lib/postgresql/data/pg_hba.conf |
| 110 | + local all all trust |
| 111 | + host all postgres all trust |
| 112 | + hostnossl all pqgossltest all reject |
| 113 | + hostnossl all pqgosslcert all reject |
| 114 | + hostssl all pqgossltest all trust |
| 115 | + hostssl all pqgosslcert all cert |
| 116 | + host all all all trust |
| 117 | + EOF |
| 118 | + CONF |
| 119 | + sudo chown 999:999 ./init/* |
| 120 | + sudo chmod 600 ./init/* |
| 121 | +
|
| 122 | + - name: start postgres |
| 123 | + run: | |
| 124 | + docker run -d \ |
| 125 | + --name pg \ |
| 126 | + -p 5432:5432 \ |
| 127 | + -v $(pwd)/init:/init \ |
| 128 | + -e POSTGRES_PASSWORD=unused \ |
| 129 | + -e POSTGRES_USER=postgres \ |
| 130 | + postgres:${{ matrix.postgres }} \ |
| 131 | + -c ssl=on \ |
| 132 | + -c ssl_ca_file=/init/root.crt \ |
| 133 | + -c ssl_cert_file=/init/server.crt \ |
| 134 | + -c ssl_key_file=/init/server.key |
| 135 | +
|
| 136 | + - name: configure postgres |
| 137 | + run: | |
| 138 | + n=0 |
| 139 | + until [ "$n" -ge 10 ] |
| 140 | + do |
| 141 | + docker exec pg pg_isready -h localhost && break |
| 142 | + n=$((n+1)) |
| 143 | + echo waiting for postgres to be ready... |
| 144 | + sleep 1 |
| 145 | + done |
| 146 | + docker exec pg bash /init/hba.sh |
| 147 | + n=0 |
| 148 | + until [ "$n" -ge 10 ] |
| 149 | + do |
| 150 | + docker exec pg su postgres -c '/usr/lib/postgresql/${{ matrix.postgres }}/bin/pg_ctl reload' && break |
| 151 | + n=$((n+1)) |
| 152 | + echo waiting for postgres to reload... |
| 153 | + sleep 1 |
| 154 | + done |
| 155 | +
|
| 156 | + - name: setup hosts |
| 157 | + run: echo '127.0.0.1 postgres' | sudo tee -a /etc/hosts |
| 158 | + |
| 159 | + - name: create db/roles |
| 160 | + run: | |
| 161 | + n=0 |
| 162 | + until [ "$n" -ge 10 ] |
| 163 | + do |
| 164 | + docker exec pg pg_isready -h localhost && break |
| 165 | + n=$((n+1)) |
| 166 | + echo waiting for postgres to be ready... |
| 167 | + sleep 1 |
| 168 | + done |
| 169 | + docker exec pg createdb -h localhost -U postgres pqgotest |
| 170 | + docker exec pg createuser -h localhost -U postgres -DRS pqgossltest |
| 171 | + docker exec pg createuser -h localhost -U postgres -DRS pqgosslcert |
| 172 | +
|
| 173 | + - name: check out code into the Go module directory |
| 174 | + uses: actions/checkout@v2 |
| 175 | + |
| 176 | + - name: set up go |
| 177 | + uses: actions/setup-go@v2 |
| 178 | + with: |
| 179 | + go-version: ${{ matrix.go }} |
| 180 | + id: go |
| 181 | + |
| 182 | + - name: set key perms |
| 183 | + run: sudo chmod 600 certs/postgresql.key |
| 184 | + |
| 185 | + - name: run tests |
| 186 | + env: |
| 187 | + PGUSER: postgres |
| 188 | + PGHOST: localhost |
| 189 | + PGPORT: 5432 |
| 190 | + PQGOSSLTESTS: 1 |
| 191 | + PQSSLCERTTEST_PATH: certs |
| 192 | + run: | |
| 193 | + PQTEST_BINARY_PARAMETERS=no go test -race -v ./... |
| 194 | + PQTEST_BINARY_PARAMETERS=yes go test -race -v ./... |
| 195 | +
|
| 196 | + - name: install goimports |
| 197 | + run: go get golang.org/x/tools/cmd/goimports |
| 198 | + |
| 199 | + - name: install staticcheck |
| 200 | + run: | |
| 201 | + wget https://github.com/dominikh/go-tools/releases/latest/download/staticcheck_linux_amd64.tar.gz -O - | tar -xz staticcheck |
| 202 | +
|
| 203 | + - name: run goimports |
| 204 | + run: | |
| 205 | + goimports -d -e . | awk '{ print } END { exit NR == 0 ? 0 : 1 }' |
| 206 | +
|
| 207 | + - name: run staticcheck |
| 208 | + run: ./staticcheck/staticcheck -go 1.13 ./... |
| 209 | + |
| 210 | + - name: build |
| 211 | + run: go build -v . |
0 commit comments