#Things that didn't work: I started by adding a service to the test step, using the same Docker image and passing the env vars the test used. ```yml name: Tests runs-on: ubuntu-latest services: mssql: image: mcr.microsoft.com/mssql/server:2022-latest env: MSSQL_SA_PASSWORD: yourStrongPassword1 ACCEPT_EULA: "Y" ports: - 1433:1433 steps: - name: Checkout code uses: actions/checkout@v3 .... ``` The test step was already installing FreeTDS, which TinyTDS depends on. When I originally set it up, all the documentation I found pointed me toward [getting the source and building and installing it](https://github.com/rails-sqlserver/tiny_tds?tab=readme-ov-file#install). I followed advice in documentation and ended up installing it like this: ```yml - name: Install freetds run: | sudo apt-get install -y build-essential wget \ && wget http://www.freetds.org/files/stable/freetds-1.1.24.tar.gz \ && tar -xzf freetds-1.1.24.tar.gz \ && cd freetds-1.1.24 \ && ./configure --prefix=/usr/local --with-tdsver=7.3 \ && sudo make \ && sudo make install ``` Now when I ran specs on CI, I got an error saying that the connection failed. I first confirmed the host and port I was using to connect to the local service. When I changed either of these, I got a new error message saying that the database server could not be found, so I was confident the host and port were correct. After a bunch of googling, I found a [related GitHub issue](https://github.com/rails-sqlserver/tiny_tds/issues/441) which points to a [problem with the TLS handshake on FreeTDS](https://github.com/FreeTDS/freetds/issues/299). [This comment](https://github.com/FreeTDS/freetds/issues/299#issuecomment-620729458) suggested using GnuTLS instead of OpenSSL for FreeTDS. I added a step to install GnuTLS in the GitHub workflow for running tests: ```yml - name: Install gnutls run: | wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.16.tar.xz \ && tar -xf gnutls-3.6.16.tar.xz \ && cd gnutls-3.6.16 \ && ./configure --prefix=/usr/local \ && sudo make \ && sudo make install ``` This failed because it needed Libnettle 3.4.1. So I added a step to install nettle: ```yml - name: Install nettle run: | wget https://ftp.gnu.org/gnu/nettle/nettle-3.4.1.tar.gz \ && tar -xzf nettle-3.4.1.tar.gz \ && cd nettle-3.4.1 \ && ./configure --prefix=/usr/local --disable-openssl --enable-shared \ && sudo make \ && sudo make install ``` What finally did work: Nettle installed successfully, but I still got the error `Libnettle 3.4.1 was not found.` when installing GnuTLS. At this point, I had exhausted my limited understanding of package management on unix and reached out for help. [Mike](https://thoughtbot.com/blog/authors/mike-burns) jumped in to help and noted that the FreeTDS package on Debian stable is version 1.3.17, and it uses GnuTLS by default. This means that I could replace all the messy wget/tar/make attempts with calls to apt-get: ```yml - name: Install gnutls run: | sudo apt-get install gnutls-bin - name: Install freetds run: | sudo apt-get install -y freetds-bin freetds-common freetds-dev libct4 libsybdb5 ```