diff --git a/.swiftformat b/.swiftformat index 1084e4c..e639ee7 100644 --- a/.swiftformat +++ b/.swiftformat @@ -1,10 +1,12 @@ # file options +--exclude .build + # format options ---self insert ---patternlet inline ---stripunusedargs unnamed-only +--self insert +--patternlet inline +--stripunusedargs unnamed-only --comments ignore # rules diff --git a/Sources/CoreMetrics/Metrics.swift b/Sources/CoreMetrics/Metrics.swift index dd5d0ef..4328087 100644 --- a/Sources/CoreMetrics/Metrics.swift +++ b/Sources/CoreMetrics/Metrics.swift @@ -84,7 +84,6 @@ public class Counter { } } - public extension Recorder { /// Create a new `Recorder`. /// @@ -153,7 +152,6 @@ public class Recorder { } } - /// A gauge is a metric that represents a single numerical value that can arbitrarily go up and down. /// Gauges are typically used for measured values like temperatures or current memory usage, but also "counts" that can go up and down, like the number of active threads. /// Gauges are modeled as `Recorder` with a sample size of 1 and that does not perform any aggregation. @@ -168,7 +166,6 @@ public class Gauge: Recorder { } } - public extension Timer { /// Create a new `Timer`. /// @@ -572,9 +569,11 @@ public final class NOOPMetricsHandler: MetricsFactory, CounterHandler, RecorderH public func makeCounter(label: String, dimensions: [(String, String)]) -> CounterHandler { return self } + public func makeRecorder(label: String, dimensions: [(String, String)], aggregate: Bool) -> RecorderHandler { return self } + public func makeTimer(label: String, dimensions: [(String, String)]) -> TimerHandler { return self } diff --git a/docker/Dockerfile b/docker/Dockerfile index 5be33fc..cbb86f7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,56 +1,37 @@ -ARG ubuntu_version=18.04 -FROM ubuntu:$ubuntu_version +ARG swift_version=5.0 +ARG ubuntu_version=bionic +# backwards compatibility for 4.2 images +ARG image_version=$swift_version-$ubuntu_version +FROM swift:$image_version # needed to do again after FROM due to docker limitation +ARG swift_version ARG ubuntu_version -ARG DEBIAN_FRONTEND=noninteractive -# do not start services during installation as this will fail and log a warning / error. -RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d +# set as UTF-8 +RUN apt-get update && apt-get install -y locales locales-all +ENV LC_ALL en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US.UTF-8 -# basic dependencies -RUN apt-get update && apt-get install -y wget git build-essential software-properties-common pkg-config locales -RUN apt-get update && apt-get install -y libicu-dev libblocksruntime0 curl libcurl4-openssl-dev libz-dev - -# local -RUN locale-gen en_US.UTF-8 -RUN locale-gen en_US en_US.UTF-8 -RUN dpkg-reconfigure locales -RUN echo 'export LANG=en_US.UTF-8' >> $HOME/.profile -RUN echo 'export LANGUAGE=en_US:en' >> $HOME/.profile -RUN echo 'export LC_ALL=en_US.UTF-8' >> $HOME/.profile - -# known_hosts -RUN mkdir -p $HOME/.ssh -RUN touch $HOME/.ssh/known_hosts -RUN ssh-keyscan github.com 2> /dev/null >> $HOME/.ssh/known_hosts - -# clang -RUN apt-get update && apt-get install -y clang-3.9 -RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.9 100 -RUN update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.9 100 +# dependencies +RUN apt-get update && apt-get install -y wget +RUN apt-get update && apt-get install -y lsof dnsutils netcat-openbsd net-tools # used by integration tests # ruby and jazzy for docs generation -#ARG skip_ruby_from_ppa -#RUN [ -n "$skip_ruby_from_ppa" ] || apt-add-repository -y ppa:brightbox/ruby-ng -#RUN [ -n "$skip_ruby_from_ppa" ] || { apt-get update && apt-get install -y ruby2.4 ruby2.4-dev; } -#RUN [ -z "$skip_ruby_from_ppa" ] || { apt-get update && apt-get install -y ruby ruby-dev; } -#RUN apt-get update && apt-get install -y libsqlite3-dev RUN apt-get update && apt-get install -y ruby ruby-dev libsqlite3-dev RUN gem install jazzy --no-ri --no-rdoc -# swift -ARG swift_version=4.2.3 -ARG swift_flavour=RELEASE -ARG swift_builds_suffix=release +# tools +RUN mkdir -p $HOME/.tools +RUN echo 'export PATH="$HOME/.tools:$PATH"' >> $HOME/.profile -RUN mkdir $HOME/.swift -RUN wget -q "https://swift.org/builds/swift-${swift_version}-${swift_builds_suffix}/ubuntu$(echo $ubuntu_version | sed 's/\.//g')/swift-${swift_version}-${swift_flavour}/swift-${swift_version}-${swift_flavour}-ubuntu${ubuntu_version}.tar.gz" -O $HOME/swift.tar.gz -RUN tar xzf $HOME/swift.tar.gz --directory $HOME/.swift --strip-components=1 -RUN echo 'export PATH="$HOME/.swift/usr/bin:$PATH"' >> $HOME/.profile -RUN echo 'export LINUX_SOURCEKIT_LIB_PATH="$HOME/.swift/usr/lib"' >> $HOME/.profile +# script to allow mapping framepointers on linux (until part of the toolchain) +RUN wget -q https://raw.githubusercontent.com/apple/swift/master/utils/symbolicate-linux-fatal -O $HOME/.tools/symbolicate-linux-fatal +RUN chmod 755 $HOME/.tools/symbolicate-linux-fatal -# script to allow mapping framepointers on linux -RUN mkdir -p $HOME/.scripts -RUN wget -q https://raw.githubusercontent.com/apple/swift/master/utils/symbolicate-linux-fatal -O $HOME/.scripts/symbolicate-linux-fatal -RUN chmod 755 $HOME/.scripts/symbolicate-linux-fatal -RUN echo 'export PATH="$HOME/.scripts:$PATH"' >> $HOME/.profile +# swiftformat (until part of the toolchain) + +ARG swiftformat_version=0.40.11 +RUN git clone --branch $swiftformat_version --depth 1 https://github.com/nicklockwood/SwiftFormat $HOME/.tools/swift-format +RUN cd $HOME/.tools/swift-format && swift build -c release +RUN ln -s $HOME/.tools/swift-format/.build/release/swiftformat $HOME/.tools/swiftformat diff --git a/docker/docker-compose.1804.42.yaml b/docker/docker-compose.1804.42.yaml index 6c8a962..a989e28 100644 --- a/docker/docker-compose.1804.42.yaml +++ b/docker/docker-compose.1804.42.yaml @@ -6,8 +6,7 @@ services: image: swift-metrics:18.04-4.2 build: args: - ubuntu_version: "18.04" - swift_version: "4.2" + image_version: "4.2" test: image: swift-metrics:18.04-4.2 diff --git a/docker/docker-compose.1804.50.yaml b/docker/docker-compose.1804.50.yaml index 2c1317a..9c760cf 100644 --- a/docker/docker-compose.1804.50.yaml +++ b/docker/docker-compose.1804.50.yaml @@ -6,7 +6,7 @@ services: image: swift-metrics:18.04-5.0 build: args: - ubuntu_version: "18.04" + ubuntu_version: "bionic" swift_version: "5.0" test: diff --git a/scripts/sanity.sh b/scripts/sanity.sh index 34d9350..6e73704 100755 --- a/scripts/sanity.sh +++ b/scripts/sanity.sh @@ -47,10 +47,23 @@ else printf "\033[0;32mokay.\033[0m\n" fi -printf "=> Checking license headers... " +printf "=> Checking format... " +FIRST_OUT="$(git status --porcelain)" +swiftformat . > /dev/null 2>&1 +SECOND_OUT="$(git status --porcelain)" +if [[ "$FIRST_OUT" != "$SECOND_OUT" ]]; then + printf "\033[0;31mformatting issues!\033[0m\n" + git --no-pager diff + exit 1 +else + printf "\033[0;32mokay.\033[0m\n" +fi + +printf "=> Checking license headers\n" tmp=$(mktemp /tmp/.swift-metrics-sanity_XXXXXX) for language in swift-or-c bash dtrace; do + printf " * $language... " declare -a matching_files declare -a exceptions expections=( )