name: cygwin on: push: # since master is a symbolic reference to main, don't run for both branches-ignore: - 'master' tags: - '*' jobs: fedora-build: runs-on: ubuntu-latest container: fedora:latest strategy: fail-fast: false matrix: include: - target: x86_64-pc-cygwin pkgarch: 64 name: Fedora cross ${{ matrix.target }} env: HAS_SSH_KEY: ${{ secrets.SSH_KEY != '' }} steps: - uses: actions/checkout@v3 # install build tools - name: Install build tools run: | dnf install -y autoconf automake make patch perl mingw${{ matrix.pkgarch }}-gcc-c++ mingw${{ matrix.pkgarch }}-winpthreads-static mingw${{ matrix.pkgarch }}-zlib-static # enable 'dnf copr' - name: Enable 'dnf copr' run: | dnf install -y dnf-plugins-core # install cross-cygwin toolchain and libs from copr - name: Install cross-cygwin toolchain and libs and cocom from copr run: | dnf copr enable -y yselkowitz/cygwin dnf install -y cygwin${{ matrix.pkgarch }}-gcc-c++ cygwin${{ matrix.pkgarch }}-gettext cygwin${{ matrix.pkgarch }}-libbfd cygwin${{ matrix.pkgarch }}-libiconv cygwin${{ matrix.pkgarch }}-zlib cocom # install doc tools - name: Install doc tools run: | dnf install -y dblatex docbook2X docbook-xsl xmlto python3 python3-lxml python3-ply openssh-clients fmtutil-sys --byfmt pdflatex && texhash # build - name: Configure, build and install run: | mkdir build install (cd winsup && ./autogen.sh) (cd build && ../configure --target=${{ matrix.target }} --prefix=$(realpath $(pwd)/../install) ) make -C build make -C build/*/newlib info man make -C build install make -C build/*/newlib install-info install-man # deploy documentation - name: Deploy documentation env: SSH_AUTH_SOCK: /tmp/ssh_agent.sock run: | # pushes to main are deployed as preview # pushes to cygwin-n.n.n (but not 'cygwin-n.n.n.dev') tags are deployed as stable # other references are ignored by this step case "${{ github.ref }}" in refs/heads/main) DEST='preview' ;; refs/tags/cygwin-[0-9.]*) DEST='stable' ;; *) exit 0 ;; esac # unfuck github fuckery of HOME in a container unset HOME # add the hosts public key to known_hosts mkdir -p ~/.ssh/ echo "cygwin.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKoejTnTCbXaIIMYfbX7t4tYUOQ2bTxZC3e/td3BageF" >> ~/.ssh/known_hosts # load the key (restricted to scp only) into ssh-agent ssh-agent -a $SSH_AUTH_SOCK > /dev/null ssh-add - <<< "${{ secrets.SSH_KEY }}" # 'make install' doesn't install faq, so instead just deploy from build directory scp -pr build/*/winsup/doc/{cygwin-api,cygwin-ug-net,faq} cygwin-admin@cygwin.com:/sourceware/www/sourceware/htdocs/cygwin/doc/${DEST}/ if: env.HAS_SSH_KEY == 'true' windows-build: runs-on: windows-latest strategy: fail-fast: false matrix: include: - target: x86_64-pc-cygwin pkgarch: x86_64 name: Windows native ${{ matrix.pkgarch }} steps: # checkout action uses the native git (we can avoid this messing up line # endings, but this could still be dangerous e.g if we need symlinks in the # repo) - run: git config --global core.autocrlf input - uses: actions/checkout@v3 # install cygwin and build tools - name: Install Cygwin uses: cygwin/cygwin-install-action@master with: platform: ${{ matrix.pkgarch }} packages: >- autoconf, automake, busybox, cocom, cygutils-extra, dblatex, dejagnu, docbook-xml45, docbook-xsl, docbook2X, gcc-g++, gettext-devel, libiconv, libiconv-devel, libzstd-devel, make, mingw64-${{ matrix.pkgarch }}-gcc-g++, mingw64-${{ matrix.pkgarch }}-zlib, patch, perl, python39-lxml, python39-ply, texlive-collection-fontsrecommended, texlive-collection-latexrecommended, texlive-collection-pictures, xmlto, zlib-devel # build - name: Build Cygwin run: >- export PATH=/usr/bin:$(cygpath ${SYSTEMROOT})/system32 && mkdir build install && (cd winsup; ./autogen.sh) && cd build && ../configure --prefix=$(realpath $(pwd)/../install) -v && export MAKEFLAGS=-j$(nproc) && make && make install && (cd */newlib; make info man) && (cd */newlib; make install-info install-man) shell: C:\cygwin\bin\bash.exe --noprofile --norc -eo pipefail '{0}' # test - name: Test Cygwin run: >- export PATH=/usr/bin:$(cygpath ${SYSTEMROOT})/system32 && export MAKEFLAGS=-j$(nproc) && cd build && (export PATH=${{ matrix.target }}/winsup/testsuite/testinst/bin:${PATH} && cmd /c $(cygpath -wa ${{ matrix.target }}/winsup/cygserver/cygserver) &) && (cd ${{ matrix.target }}/winsup; make check AM_COLOR_TESTS=always) shell: C:\cygwin\bin\bash.exe --noprofile --norc -eo pipefail '{0}' # upload test logs to facilitate investigation of problems - name: Upload test logs uses: actions/upload-artifact@v3 with: name: testlogs path: | build/${{ matrix.target }}/winsup/testsuite/**/*.log build/${{ matrix.target }}/winsup/testsuite/**/*.trs if: ${{ !cancelled() }} # workaround problems with actions/checkout post-run step using cygwin git - name: Avoid actions/checkout post-run step using Cygwin git run: bash -c 'rm /usr/bin/git.exe'