Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Earthfile flutter integration tests #304

Merged
merged 10 commits into from
Mar 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading