From d907ab9db2a6773241019c7391a06cea6822523b Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Fri, 11 Dec 2020 13:27:02 +0100 Subject: [PATCH 1/3] Initial version --- CHANGELOG.md | 4 ++ LICENSE | 26 +++++++++++++ README.md | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++- action.yml | 12 ++++++ setup.sh | 40 ++++++++++++++++++++ 5 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 action.yml create mode 100755 setup.sh diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..da776a9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +## Initial version + +- Basic download and setup. +- Support for Linux, macOS, and Windows. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b9cb482 --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ +Copyright 2020, the Dart project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md index f00249f..7b26c3c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,102 @@ # setup-dart -GitHub Action for install and setup of a Dart SDK + +This [GitHub Action]() installs and sets up of a Dart SDK for use in actions by: + +* Downloading the Dart SDK +* Adding the `dart` command and `pub` cache to path + +# Usage + +## Basic + +Install the latest stable SDK, and run Hello World. + +``` +name: Dart + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: dart-lang/setup-dart@v1 + + - name: Install dependencies + run: dart pub get + + - name: Hello world + run: dart bin/hello_world.dart +``` + +## Check static analysis, formatting, and tests + +Various static checks: + + 1) Check static analysis with the Dart analyzer + 2) Check code follows Dart ideomatic formatting + 3) Check that unit tests pass + +``` +... + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: dart pub get + + - name: Verify formatting + run: dart format --output=none --set-exit-if-changed . + + - name: Analyze project source + run: dart analyze + + - name: Run tests + run: dart test +`` + +## Matrix testing + +Double matrix across two dimensions: + + - All three major operating systems: Linux, macOS, and Windows. + - Dart release channels: stable, beta, dev. + +``` +name: Dart + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + channel: [stable, beta, dev] + steps: + - uses: actions/checkout@v2 + - uses: dart-lang/setup-dart@v1 + with: + channel: ${{ matrix.channel }} + + - name: Install dependencies + run: dart pub get + + - name: Run tests + run: dart test +``` + +# License + +See the [`LICENSE`](LICENSE) file. \ No newline at end of file diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..de24fa6 --- /dev/null +++ b/action.yml @@ -0,0 +1,12 @@ +name: "Setup Dart SDK" +description: "Setup the Dart SDK, and add it to the PATH" +inputs: + channel: + description: "The release channel to install from ('stable', 'beta', or 'dev')" + required: false + default: "stable" +runs: + using: "composite" + steps: + - run: $GITHUB_ACTION_PATH/setup.sh ${{ inputs.channel }} ${{ runner.os }} + shell: bash diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..da663cc --- /dev/null +++ b/setup.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +############################################################################### +# Bash script that downloads and does setup for a Dart SDK. # +# Takes three params; first listed is the default: # +# $1: Dart channel: stable|beta|dev # +# $2: OS: Linux|Windows|macOS # +# $3: ARCH: x64|ia32 # +############################################################################### + + +# Parse args. +CHANNEL="${1:-stable}" +OS="${2:-Linux}" +ARCH="${3:-x64}" +OS=$(echo "$OS" | awk '{print tolower($0)}') +echo "Installing Dart SDK from the ${CHANNEL} channel on ${OS}-${ARCH}" + +# Calculate download Url. Based on: +# https://dart.dev/tools/sdk/archive#download-urls +PREFIX="https://storage.googleapis.com/dart-archive/channels" +URL="${PREFIX}/${CHANNEL}/release/latest/sdk/dartsdk-${OS}-${ARCH}-release.zip" +echo "Downloading ${URL}..." + +# Download installation zip. +curl --connect-timeout 15 --retry 5 "$URL" > "${HOME}/dartsdk.zip" +unzip "${HOME}/dartsdk.zip" -d "${RUNNER_TOOL_CACHE}" > /dev/null +if [ $? -ne 0 ]; then + echo -e "::error::Download failed! Please check passed arguments." + exit 1 +fi +rm "${HOME}/dartsdk.zip" + +# Update paths. +echo "${HOME}/.pub-cache/bin" >> $GITHUB_PATH +echo "${RUNNER_TOOL_CACHE}/dart-sdk/bin" >> $GITHUB_PATH + +# Report success, and print version. +echo -e "Succesfully installed Dart SDK:" +${RUNNER_TOOL_CACHE}/dart-sdk/bin/dart --version From 2716834b0f4c8b2b2ac5c5fe0b054837cc3d3a5f Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Fri, 11 Dec 2020 13:42:37 +0100 Subject: [PATCH 2/3] Fix readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b26c3c..daa9274 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Various static checks: - name: Run tests run: dart test -`` +``` ## Matrix testing From 79e1913362c649c4b18ad046cb29158a267a25b8 Mon Sep 17 00:00:00 2001 From: Michael Thomsen Date: Fri, 11 Dec 2020 13:46:01 +0100 Subject: [PATCH 3/3] Initial test workflow --- .github/workflows/dart.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/dart.yml diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml new file mode 100644 index 0000000..fec8bc5 --- /dev/null +++ b/.github/workflows/dart.yml @@ -0,0 +1,25 @@ +name: Dart + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + channel: [stable, beta, dev] + steps: + - uses: actions/checkout@v2 + - uses: ./ + with: + channel: ${{ matrix.channel }} + + - name: Run hello world + run: | + echo "main() { print('hello world'); }" > hello.dart + dart hello.dart