From 3e5dbd979a67e732d00e25f6fa3480fc4b5d855a Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Tue, 1 Jun 2021 10:25:31 -0500 Subject: [PATCH] Migrate to GitHub Actions (#637) * Migrate to GitHub Actions * Add release steps * Use WebFreak001/upload-asset@v1.0.0 * Package the files using tar and 7z * Use TAG_RAW in the names --- .github/workflows/ci.yml | 108 +++++++++++++++++++++++++++++++++++++ .travis.sh | 24 --------- .travis.yml | 95 --------------------------------- appveyor.yml | 112 --------------------------------------- release-windows.sh | 22 -------- release.sh | 23 -------- setup-ldc-windows.sh | 52 ------------------ 7 files changed, 108 insertions(+), 328 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100755 .travis.sh delete mode 100644 .travis.yml delete mode 100644 appveyor.yml delete mode 100755 release-windows.sh delete mode 100755 release.sh delete mode 100644 setup-ldc-windows.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..53db0d6 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,108 @@ +name: CI +on: + pull_request: + push: + branches: + - master + release: + types: [published] + +jobs: + Build: + if: "!contains(github.event.head_commit.message, '[skip ci]')" + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + dc: + - ldc-latest + - dmd-latest + arch: + - x86_64 + include: + # windows x86 + - os: windows-latest + arch: x86 + dc: ldc-latest + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Setup D + uses: dlang-community/setup-dlang@v1 + with: + compiler: ${{ matrix.dc }} + + # Build + + - name: Build + run: | + dub build --build=release --config=client --arch=${{ matrix.arch }} + dub build --build=release --config=server --arch=${{ matrix.arch }} + + # Tests + + - name: Linux Tests + if: contains(matrix.os, 'ubuntu') + run: | + ./run_tests.sh + working-directory: tests + shell: bash + + - name: Windows and MacOS Tests + if: contains(matrix.os, 'windows') || contains(matrix.os, 'macos') + run: | + ./run_tests.sh + working-directory: tests + shell: bash + continue-on-error: true + + + # Package Release + + - name: Package the artificats + if: github.event_name == 'release' && contains(matrix.dc, 'ldc') + shell: pwsh + run: | + if ("${{ matrix.os }}" -like 'windows*') { + 7z a -tzip dcd.zip dcd-client.exe dcd-server.exe + } else { + tar -cvzf dcd.tar.gz dcd-client dcd-server + } + + # Release + + - name: Release Linux + if: github.event_name == 'release' && contains(matrix.os, 'ubuntu') && contains(matrix.dc, 'ldc') + uses: WebFreak001/upload-asset@v1.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OS: linux + with: + file: dcd.tar.gz + filename: dcd-${TAG_RAW}-${OS}-${{ matrix.arch }}.tar.gz + mime: application/tar+gzip + + - name: Release Macos + if: github.event_name == 'release' && contains(matrix.os, 'macos') && contains(matrix.dc, 'ldc') + uses: WebFreak001/upload-asset@v1.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OS: osx + with: + file: dcd.tar.gz + filename: dcd-${TAG_RAW}-${OS}-${{ matrix.arch }}.tar.gz + mime: application/tar+gzip + + - name: Release Windows + if: github.event_name == 'release' && contains(matrix.os, 'windows') && contains(matrix.dc, 'ldc') + uses: WebFreak001/upload-asset@v1.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OS: windows + with: + file: dcd.zip + filename: dcd-${TAG_RAW}-${OS}-${{ matrix.arch }}.zip + mime: application/zip diff --git a/.travis.sh b/.travis.sh deleted file mode 100755 index 8c47256..0000000 --- a/.travis.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -set -e - -if [[ $BUILD == dub ]]; then - if [[ -n $LIBDPARSE_VERSION ]]; then - rdmd ./d-test-utils/test_with_package.d $LIBDPARSE_VERSION libdparse -- dub build --build=release --config=client - rdmd ./d-test-utils/test_with_package.d $LIBDPARSE_VERSION libdparse -- dub build --build=release --config=server - elif [[ -n $DSYMBOL_VERSION ]]; then - rdmd ./d-test-utils/test_with_package.d $DSYMBOL_VERSION dsymbol -- dub build --build=release --config=client - rdmd ./d-test-utils/test_with_package.d $DSYMBOL_VERSION dsymbol -- dub build --build=release --config=server - else - echo 'Cannot run test without LIBDPARSE_VERSION nor DSYMBOL_VERSION environment variable' - exit 1 - fi -elif [[ $DC == ldc2 ]]; then - git submodule update --init --recursive - make ldc -j2 -else - git submodule update --init --recursive - make debug -j2 -fi - -cd tests && ./run_tests.sh diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 26321bc..0000000 --- a/.travis.yml +++ /dev/null @@ -1,95 +0,0 @@ -dist: xenial -language: d - -d: - - dmd - - ldc-beta - - ldc - -os: - - linux -# TODO, some bug in OSX for the server that causes it to fail -# - osx - -env: - - BUILD= - - BUILD=dub LIBDPARSE_VERSION=min - - BUILD=dub LIBDPARSE_VERSION=max - - BUILD=dub DSYMBOL_VERSION=min - - BUILD=dub DSYMBOL_VERSION=max - -branches: - only: - - master - - /^v\d+\.\d+\.\d+([+-]\S*)*$/ - -script: ./.travis.sh -jobs: - include: - - stage: GitHub Release - #if: tag IS present - d: ldc-1.23.0 - os: linux - script: echo "Deploying to GitHub releases ..." && ./release.sh - deploy: - provider: releases - api_key: $GH_REPO_TOKEN - file_glob: true - file: bin/dcd-*.tar.gz - skip_cleanup: true - on: - repo: dlang-community/DCD - tags: true - - stage: GitHub Release - #if: tag IS present - d: ldc-1.23.0 - os: osx - script: echo "Deploying to GitHub releases ..." && ./release.sh - deploy: - provider: releases - api_key: $GH_REPO_TOKEN - file_glob: true - file: bin/dcd-*.tar.gz - skip_cleanup: true - on: - repo: dlang-community/DCD - tags: true - - stage: GitHub Release - #if: tag IS present - d: ldc-1.23.0 - os: linux - script: echo "Deploying to GitHub releases ..." && ./release-windows.sh - addons: - apt: - packages: - - p7zip-full - deploy: - provider: releases - api_key: $GH_REPO_TOKEN - file_glob: true - file: bin/dcd-*.zip - skip_cleanup: true - on: - repo: dlang-community/DCD - tags: true - - stage: GitHub Release - #if: tag IS present - d: ldc-1.23.0 - os: linux - script: echo "Deploying to GitHub releases ..." && ARCH=64 ./release-windows.sh - addons: - apt: - packages: - - p7zip-full - deploy: - provider: releases - api_key: $GH_REPO_TOKEN - file_glob: true - file: bin/dcd-*.zip - skip_cleanup: true - on: - repo: dlang-community/DCD - tags: true -stages: - - name: test - if: type = pull_request or (type = push and branch = master) diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 9a3a11e..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,112 +0,0 @@ -platform: x64 -environment: - matrix: - - DC: dmd - DVersion: stable - arch: x64 - - DC: dmd - DVersion: stable - arch: x86 - # - DC: ldc - # DVersion: beta - # arch: x86 - # - DC: ldc - # DVersion: beta - # arch: x64 - # - DC: ldc - # DVersion: stable - # arch: x86 - # - DC: ldc - # DVersion: stable - # arch: x64 - -skip_tags: false -branches: - only: - - master - - /^v\d+\.\d+\.\d+([+-]\S*)*$/ - -install: - - ps: function ResolveLatestDMD - { - $version = $env:DVersion; - if($version -eq "stable") { - $latest = (Invoke-WebRequest "http://downloads.dlang.org/releases/LATEST").toString(); - $url = "http://downloads.dlang.org/releases/2.x/$($latest)/dmd.$($latest).windows.7z"; - }elseif($version -eq "beta") { - $latest = (Invoke-WebRequest "http://downloads.dlang.org/pre-releases/LATEST").toString(); - $latestVersion = $latest.split("-")[0].split("~")[0]; - $url = "http://downloads.dlang.org/pre-releases/2.x/$($latestVersion)/dmd.$($latest).windows.7z"; - }elseif($version -eq "nightly") { - $url = "http://nightlies.dlang.org/dmd-master-2017-05-20/dmd.master.windows.7z" - }else { - $url = "http://downloads.dlang.org/releases/2.x/$($version)/dmd.$($version).windows.7z"; - } - $env:PATH += ";C:\dmd2\windows\bin;"; - return $url; - } - - ps: function ResolveLatestLDC - { - $version = $env:DVersion; - if($version -eq "stable") { - $latest = (Invoke-WebRequest "https://ldc-developers.github.io/LATEST").toString().replace("`n","").replace("`r",""); - $url = "https://github.com/ldc-developers/ldc/releases/download/v$($latest)/ldc2-$($latest)-win64-msvc.zip"; - }elseif($version -eq "beta") { - $latest = (Invoke-WebRequest "https://ldc-developers.github.io/LATEST_BETA").toString().replace("`n","").replace("`r",""); - $url = "https://github.com/ldc-developers/ldc/releases/download/v$($latest)/ldc2-$($latest)-win64-msvc.zip"; - } else { - $latest = $version; - $url = "https://github.com/ldc-developers/ldc/releases/download/v$($version)/ldc2-$($version)-win64-msvc.zip"; - } - $env:PATH += ";C:\ldc2-$($latest)-win64-msvc\bin"; - $env:DC = "ldc2"; - return $url; - } - - ps: function SetUpDCompiler - { - $env:toolchain = "msvc"; - if($env:DC -eq "dmd"){ - echo "downloading ..."; - $url = ResolveLatestDMD; - echo $url; - Invoke-WebRequest $url -OutFile "c:\dmd.7z"; - echo "finished."; - pushd c:\\; - 7z x dmd.7z > $null; - popd; - } - elseif($env:DC -eq "ldc"){ - echo "downloading ..."; - $url = ResolveLatestLDC; - echo $url; - Invoke-WebRequest $url -OutFile "c:\ldc.zip"; - echo "finished."; - pushd c:\\; - 7z x ldc.zip > $null; - popd; - } - } - - ps: SetUpDCompiler - -build_script: - - ps: if($env:arch -eq "x86"){ - $env:compilersetupargs = "x86"; - $env:Darch = "x86"; - $env:DConf = "m32"; - }elseif($env:arch -eq "x64"){ - $env:compilersetupargs = "amd64"; - $env:Darch = "x86_64"; - $env:DConf = "m64"; - } - - ps: $env:compilersetup = "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall"; - - '"%compilersetup%" %compilersetupargs%' - -test_script: - - echo %PLATFORM% - - echo %Darch% - - echo %DC% - - echo %PATH% - - '%DC% --version' - - dub test --arch=%Darch% --compiler=%DC% - - git submodule update --init --recursive - - build.bat diff --git a/release-windows.sh b/release-windows.sh deleted file mode 100755 index 45bd1a7..0000000 --- a/release-windows.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# Build the Windows binaries under Linux -set -eux -o pipefail - -BIN_NAME=dcd - -# Allow the script to be run from anywhere -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -cd $DIR - -source setup-ldc-windows.sh - -# Run LDC with cross-compilation -archiveName="$BIN_NAME-$VERSION-$OS-$ARCH_SUFFIX.zip" -echo "Building $archiveName" -mkdir -p bin -DC=ldmd2 make ldcclient ldcserver - -cd bin -mv dcd-client dcd-client.exe -mv dcd-server dcd-server.exe -zip "$archiveName" "dcd-client.exe" "dcd-server.exe" diff --git a/release.sh b/release.sh deleted file mode 100755 index 3c24e70..0000000 --- a/release.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -set -eux -o pipefail -VERSION=$(git describe --abbrev=0 --tags) -ARCH="${ARCH:-64}" -LDC_FLAGS=() -unameOut="$(uname -s)" -case "$unameOut" in - Linux*) OS=linux; LDC_FLAGS=("-flto=full" "-linker=gold" "-static") ;; - Darwin*) OS=osx; LDC_FLAGS+=("-L-macosx_version_min" "-L10.7" "-L-lcrt1.o"); ;; - *) echo "Unknown OS: $unameOut"; exit 1 -esac - -case "$ARCH" in - 64) ARCH_SUFFIX="x86_64";; - 32) ARCH_SUFFIX="x86";; - *) echo "Unknown ARCH: $ARCH"; exit 1 -esac - -archiveName="dcd-$VERSION-$OS-$ARCH_SUFFIX.tar.gz" - -echo "Building $archiveName" -${MAKE:-make} ldcclient ldcserver LDC_FLAGS="${LDC_FLAGS[*]}" -tar cvfz "bin/$archiveName" -C bin dcd-server dcd-client diff --git a/setup-ldc-windows.sh b/setup-ldc-windows.sh deleted file mode 100644 index 6d5544b..0000000 --- a/setup-ldc-windows.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash - -# Sets up LDC for cross-compilation. Source this script, s.t. the new LDC is in PATH - -# Make sure this version matches the version of LDC2 used in .travis.yml, -# otherwise the compiler and the lib used might mismatch. -LDC_VERSION="1.23.0" -ARCH=${ARCH:-32} -VERSION=$(git describe --abbrev=0 --tags) -OS=windows - -# LDC should already be installed (see .travis.yml) -# However, we need the libraries, so download them -# We can't use the downloaded ldc2 itself, because obviously it's for Windows - -if [ "${ARCH}" == 64 ]; then - ARCH_SUFFIX='x86_64' - ZIP_ARCH_SUFFIX='x64' -else - ARCH_SUFFIX='i686' - ZIP_ARCH_SUFFIX='x86' -fi - -LDC_DIR_PATH="$(pwd)/ldc2-${LDC_VERSION}-windows-${ZIP_ARCH_SUFFIX}" -LDC_XDFLAGS="-conf=${LDC_DIR_PATH}/etc/ldc2.conf -mtriple=${ARCH_SUFFIX}-pc-windows-msvc" - -# Step 1: download the LDC Windows release -# Check if the user already have it (e.g. building locally) -if [ ! -d ${LDC_DIR_PATH} ]; then - if [ ! -d "ldc2-${LDC_VERSION}-windows-${ZIP_ARCH_SUFFIX}.7z" ]; then - wget "https://github.com/ldc-developers/ldc/releases/download/v${LDC_VERSION}/ldc2-${LDC_VERSION}-windows-${ZIP_ARCH_SUFFIX}.7z" - fi - 7z x "ldc2-${LDC_VERSION}-windows-${ZIP_ARCH_SUFFIX}.7z" > /dev/null -fi - -# Step 2: Generate a config file with the proper path -cat > ${LDC_DIR_PATH}/etc/ldc2.conf <