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 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..daa9274 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