Skip to content

Commit

Permalink
feat: Earthfile flutter integration tests (#304)
Browse files Browse the repository at this point in the history
* feat(earthly): first draft

* feat: adds cspell words

* feat: adds scripts and earthly target to install browsers

* feat: adds test targets

* feat: cleanup and cspell

* feat: adds logging

* feat: removing edge testing

* fix: restore cspell

* feat: remove integration test  workflow
  • Loading branch information
kukkok3 authored Mar 15, 2024
1 parent 9e580c0 commit 6f137a6
Show file tree
Hide file tree
Showing 7 changed files with 138 additions and 67 deletions.
3 changes: 3 additions & 0 deletions .config/dictionaries/project.dic
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ dotglob
drep
dreps
earthfile
Edgedriver
encryptor
fetchval
fmtchk
Expand All @@ -47,6 +48,7 @@ Formz
fuzzer
gapless
gcloud
geckodriver
genhtml
gethostname
gmtime
Expand All @@ -72,6 +74,7 @@ mgrybyk
mithril
mitigations
moderations
msedgedriver
multidex
myproject
nanos
Expand Down
46 changes: 0 additions & 46 deletions .github/workflows/flutter-web-integration-test.yml

This file was deleted.

38 changes: 17 additions & 21 deletions catalyst_voices/Earthfile
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
VERSION --try --global-cache 0.7
VERSION --try --global-cache --arg-scope-and-set 0.7

deps:
FROM debian:stable-slim
FROM debian:bookworm-slim
RUN apt-get update
RUN apt-get install -y curl git unzip bash
WORKDIR /frontend
RUN apt-get install -y git curl unzip bzip2 bash jq gpg
COPY --dir test_driver/scripts .
RUN chmod +x scripts/install-chrome-linux64.sh && ./scripts/install-chrome-linux64.sh
RUN chmod +x scripts/install-edge-linux64.sh && ./scripts/install-edge-linux64.sh
RUN chmod +x scripts/install-firefox-linux64.sh && ./scripts/install-firefox-linux64.sh

# Download and set-up flutter
flutter:
FROM +deps
WORKDIR /frontend

RUN git clone https://github.com/flutter/flutter.git /usr/local/flutter
GIT CLONE https://github.com/flutter/flutter.git /usr/local/flutter
ENV PATH="/usr/local/flutter/bin:/usr/local/flutter/bin/cache/dart-sdk/bin:${PATH}"

RUN flutter channel stable
Expand All @@ -19,11 +20,13 @@ flutter:
RUN flutter doctor -v
RUN flutter config --enable-web

src:
FROM +deps
COPY --dir pubspec.yaml lib packages web test test_driver integration_test .

# Build web version of Catalyst Voices
build:
FROM +flutter

COPY --dir pubspec.yaml lib packages web test test_driver integration_test .
FROM +src

RUN flutter clean
RUN flutter pub get
Expand All @@ -32,18 +35,11 @@ build:
WORKDIR /frontend/build
SAVE ARTIFACT web /web AS LOCAL web

docker:
FROM +deps
FROM nginx:stable-alpine3.17

package:
FROM nginx:alpine3.18
ARG tag='latest'
COPY +build/web /app
COPY ./nginx.conf /etc/nginx/nginx.conf

EXPOSE 80

package:
FROM +docker

ARG tag='latest'

SAVE IMAGE catalyst-voices-app:$tag
40 changes: 40 additions & 0 deletions catalyst_voices/test_driver/Earthfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
VERSION --try --global-cache --arg-scope-and-set 0.7

integration-test-web:
FROM ../+build
ARG browser
LET driver_port = 4444

IF [ $browser = "chrome" ]
LET driver = "chromedriver"
END

IF [ $browser = "firefox" ]
LET driver = "geckodriver"
END
# Commenting out Edge tests as they are failing due to:
# https://github.com/flutter/flutter/issues/76213
# https://github.com/flutter/flutter/issues/142021
#IF [ $browser = "edge" ]
# LET driver = "msedgedriver"
#END
RUN ($driver --port=$driver_port > $driver.log &) && \
flutter drive --driver=test_driver/integration_test.dart \
--target=integration_test/main.dart \
--flavor development -d web-server --profile \
--browser-name=$browser --driver-port=$driver_port || echo fail > fail
# Using WAIT instead of TRY because TRY/CATCH/FINALLY does not (currently) support expanding args for SAVE ARTIFACT paths
WAIT
SAVE ARTIFACT $driver.log AS LOCAL $driver.log
END
IF [ -f fail ]
RUN echo ""$browser" integration test failed" && \
echo "Printing "$driver" logs..." && \
cat $driver.log && \
exit 1
END

test-web-all:
BUILD +integration-test-web \
--browser=chrome \
--browser=firefox
35 changes: 35 additions & 0 deletions catalyst_voices/test_driver/scripts/install-chrome-linux64.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/bin/bash
# This script installs Chrome for testing and Chromedriver
PLATFORM=linux64
DISTR="Debian 12 (Bookworm)"

# Installing dependencies for Chrome. Workaround for:
# https://github.com/GoogleChromeLabs/chrome-for-testing/issues/55
echo "Installing Google Chrome dependencies"
chrome_deps=$(curl -s https://raw.githubusercontent.com/chromium/chromium/main/chrome/installer/linux/debian/dist_package_versions.json)
deps=$(echo "$chrome_deps" | jq -r ".\"$DISTR\" | keys[]")
apt-get update
for dep in $deps; do
apt-get install -y $dep
done

# Get latest chrome for testing version
json_chrome=$(curl -s https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json)

# Install chrome
echo "Installing Google Chrome..."
latest_chrome=$(echo "$json_chrome" | jq -r ".channels.Stable.downloads.chrome[].url | select(contains(\"$PLATFORM\"))")
curl -s --create-dirs -o chrome.zip --output-dir /opt/chrome "$latest_chrome"
unzip -d /opt/chrome -j /opt/chrome/chrome.zip && rm /opt/chrome/chrome.zip
ln -s /opt/chrome/chrome /usr/local/bin/google-chrome
chmod +x /opt/chrome/chrome
google-chrome --version

# Install chromedriver
echo "Installing Chromedriver..."
latest_chromedriver=$(echo "$json_chrome" | jq -r ".channels.Stable.downloads.chromedriver[].url | select(contains(\"$PLATFORM\"))")
curl -s --create-dirs -o chromedriver.zip --output-dir /opt/chromedriver "$latest_chromedriver"
unzip -d /opt/chromedriver -j /opt/chromedriver/chromedriver.zip && rm /opt/chromedriver/chromedriver.zip
ln -s /opt/chromedriver/chromedriver /usr/local/bin/chromedriver
chmod +x /opt/chromedriver/chromedriver
chromedriver --version
18 changes: 18 additions & 0 deletions catalyst_voices/test_driver/scripts/install-edge-linux64.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash
# This script installs Edge and Edgedriver.
PLATFORM=linux64

echo "Installing Edge..."
install -d -m 0755 /etc/apt/keyrings
curl -fSsL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/keyrings/microsoft-edge.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/keyrings/microsoft-edge.gpg] https://packages.microsoft.com/repos/edge stable main' | tee /etc/apt/sources.list.d/microsoft-edge.list
apt-get update && apt-get install -y microsoft-edge-stable
microsoft-edge-stable --version

echo "Installing Edgedriver..."
edge_version=$(microsoft-edge-stable --version | grep -Eo '[0-9]+.+' | tr -d ' ')
curl -s --create-dirs -o msedgedriver.zip --output-dir /opt/msedgedriver "https://msedgedriver.azureedge.net/$edge_version/edgedriver_$PLATFORM.zip"
unzip -d /opt/msedgedriver -j /opt/msedgedriver/msedgedriver.zip && rm /opt/msedgedriver/msedgedriver.zip
ln -s /opt/msedgedriver/msedgedriver /usr/local/bin/msedgedriver
chmod +x /opt/msedgedriver/msedgedriver
msedgedriver --version
25 changes: 25 additions & 0 deletions catalyst_voices/test_driver/scripts/install-firefox-linux64.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash
# This script installs Firefox and Geckodriver. Geckodriver supported versions:
# https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html
PLATFORM=linux64

echo "Installing Firefox..."
install -d -m 0755 /etc/apt/keyrings
curl -fSsL https://packages.mozilla.org/apt/repo-signing-key.gpg | tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | tee -a /etc/apt/sources.list.d/mozilla.list > /dev/null
echo '
Package: *
Pin: origin packages.mozilla.org
Pin-Priority: 1000
' | tee /etc/apt/preferences.d/mozilla
apt-get update && apt-get install -y firefox
firefox --version

echo "Installing Geckodriver..."
json_geckodriver=$(curl -s https://api.github.com/repos/mozilla/geckodriver/releases/latest)
latest_geckodriver=$(echo "$json_geckodriver" | jq -r ".assets[].browser_download_url | select(contains(\"$PLATFORM\") and endswith(\"gz\"))")
curl -sL --create-dirs -o geckodriver.tar.gz --output-dir /opt/geckodriver "$latest_geckodriver"
tar -xzf /opt/geckodriver/geckodriver.tar.gz -C /opt/geckodriver/ && rm /opt/geckodriver/geckodriver.tar.gz
ln -s /opt/geckodriver/geckodriver /usr/local/bin/geckodriver
chmod +x /opt/geckodriver/geckodriver
geckodriver --version

0 comments on commit 6f137a6

Please sign in to comment.