Skip to main content

· 9 min read
Tiago Silva

To maintain an integrated and optimized workflow in our project, we use Playwright as our end-to-end testing framework.

Goal: GitHub Integration for Test Automation

Situation (S) Our team needed an efficient way to ensure that rapid code changes didn’t introduce unexpected bugs. Manual testing was time-consuming and prone to oversight—especially as multiple pull requests would arrive daily. We lacked a quick feedback loop to catch regressions before merging.

Task (T) We aimed to establish a robust continuous integration (CI) pipeline that automatically ran end-to-end (E2E) tests on every push or pull request. By doing so, we hoped to reduce production defects, speed up feedback to developers, and increase confidence in new features.

Action (A) We integrated Playwright into our project and linked it with GitHub Actions. This involved:

  • Installing Playwright with the recommended CLI commands.
  • Generating a default workflow (.github/workflows/playwright.yml) for GitHub Actions.
  • Customizing playwright.config.ts to optimize test execution.
  • Ensuring that test results and artifacts (screenshots, HTML reports) were uploaded as GitHub Actions artifacts for easy debugging.

Result (R) By adding automated E2E tests and running them on GitHub Actions, we:

  • Caught critical bugs earlier, reducing production incidents.
  • Accelerated feedback loops, as developers could see failing tests directly on pull requests.

To ensure that test automation keeps up with the project's code updates and revisions, we integrate Playwright with Git. This integration enables:

  • Continuous integration (CI/CD) pipelines triggered automatically on every push or pull request;
  • Automatic test execution to prevent bugs before reaching production.

Why Choose Playwright?

Playwright stands out by offering support for:

  • Multiple browsers: Chromium, Firefox, and WebKit;
  • Multiple programming languages: JavaScript/TypeScript, Python, Java, and .NET.

It also provides benefits such as:

  • Capturing screenshots and video recordings during test executions;
  • Simulating devices and network conditions;
  • Running tests in parallel and in "headless" mode (without a graphical interface).

· 4 min read
Luis Silva

A useful tool for offline tinkering when away from your devices

At Remote Flags we were recently tasked to build an IoT platform to manage and interact with IOT devices. These IOT devices would run with Revolution Pi, which is based on Raspberry Pi.

We didn't have access to their hardware, neither physically nor logically through a network communication protocol.

To facilitate new feature development as well as doing end-to-end testing, we decided to build a simulator, to mirror the hardware behavior when receiving and sending messages.

This solution described in this post uses the Revolution Pi software, revpimodio2, written in Python.

· 6 min read
Luis Silva

Create a simple approach using ECS improving on our previous solution using AWS Elastic Beanstalk

If you're following our blog posts chronologically, you'll see I've made a blunder in the past of trying to use AWS Elastic Beanstalk to support 2 Nodejs web apps in the same instance. (see here). This blog post aims at providing a simple alternative using another AWS compute service, Elastic Container Service (ECS).

Let's get into it!

· 6 min read
Luis Silva

And how we figured out it was not the right choice for us

TLDR: If you want multiple apps running separately in an EC2 instance, with some managed properties (Load balancer, health monitoring, etc). Elastic Beanstalk is NOT the way to go.

At Remote Flags, I was in charge of setting up the infrastructure for a small service to facilitate demoing the main application to interested people.

As we're a small team, and budget is tight, I figured I would use a single "non-critical infrastructure" server; this would contain small tools that, if they went down, wouldn't impact the overall availability of our service.

· 4 min read
Miguel Sousa

A step-by-step configuration for a cognito user pool using CDK.

  • CDK is an open-source framework that allows you to express cloud infra-structure using code. More on CDK
  • Cognito is an AWS service that allows you to create user pools to manage user accounts and login flows. More on Cognito
  • As of February 2022 versions used in this guide are
{
"typescript": "~3.9.7",
"aws-cdk-lib": "2.10.0"
}