Skip to content

Commit

Permalink
Allow to build blueprint based on local Theia sources #304
Browse files Browse the repository at this point in the history
Contributed on behalf of STMicroelectronics

Signed-off-by: Johannes Faltermeier <[email protected]>
  • Loading branch information
jfaltermeier committed Nov 30, 2023
1 parent 764d9ba commit 7e2bbed
Show file tree
Hide file tree
Showing 6 changed files with 182 additions and 0 deletions.
38 changes: 38 additions & 0 deletions .github/workflows/publish-theia-builder.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Publish Theia Builder Docker Image

on:
push:
branches:
- jf/local-theia-build
workflow_dispatch:
inputs:
tag:
description: The image's tag
required: true
default: next

jobs:
build:
name: Build and push theia builder image to Github Packages
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v2

- name: Log in to the Github Container registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: ./docker/local-theia-build
file: local-theia-build.Dockerfile
push: true
tags: |
ghcr.io/${{ github.repository }}/blueprint-theia-builder:latest
# ghcr.io/${{ github.repository }}/blueprint-theia-builder:${{ github.event.inputs.tag }}
16 changes: 16 additions & 0 deletions docker/local-theia-build/adduser
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/usr/bin/expect -f
set timeout 10

spawn npm adduser --registry http://localhost:4873/
match_max 100000

expect "Username"
send "dummy-user\r"

expect "Password"
send "dummy-p4ssword\r"

expect "Email: (this IS public)"
send "[email protected]\r"

expect "Logged in on http://localhost:4873/."
43 changes: 43 additions & 0 deletions docker/local-theia-build/entrypoint
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/bin/sh
set -e

if [ "$#" -eq 0 ]
then
REGISTRY=http://localhost:4873/
echo "Launching Verdaccio and adding dummy user"
verdaccio --listen http://0.0.0.0:4873 &
VERDACCIO_PID=$!
while ! nc -z localhost 4873; do
sleep 1
done
expect -f /tmp/adduser
expect -f /tmp/loginuser
else
REGISTRY=$1
if [ ! "$AUTH_TOKEN" = "" ]
then
echo "Updating npmrc"
echo //$REGISTRY:_authToken=$AUTH_TOKEN >> /.npmrc
fi
fi

echo "Building Theia"
cd /tmp/theia
npm config set registry $REGISTRY
yarn config set registry $REGISTRY
yarn
yarn build


echo "PUBLISH $PUBLISH"
if [ "$PUBLISH" = "true" ]
then
echo "Publishing Theia..."
yarn publish:local:next --registry $REGISTRY || true
fi

if [ "$#" -eq 0 ]
then
echo "Waiting..."
wait $VERDACCIO_PID
fi
13 changes: 13 additions & 0 deletions docker/local-theia-build/loginuser
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/usr/bin/expect -f
set timeout 10

spawn npm login --registry http://localhost:4873/
match_max 100000

expect "Username"
send "dummy-user\r"

expect "Password"
send "dummy-p4ssword\r"

expect "Logged in on http://localhost:4873/."
35 changes: 35 additions & 0 deletions local-theia-build.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Prerequisites
# https://github.com/eclipse-theia/theia/blob/master/doc/Developing.md#prerequisites
FROM node:18.17.0
RUN apt-get update && \
apt-get install -y \
make \
gcc \
pkg-config \
build-essential \
libx11-dev \
libxkbfile-dev \
libsecret-1-dev && \
# install local npm registry and helper tools
yarn global add verdaccio && \
apt-get install -y expect-dev netcat-openbsd && \
mkdir /tmp/verdaccio && chmod 777 /tmp/verdaccio && \
# create some common default directories/files with write access for any user
touch /.yarnrc && chmod 777 /.yarnrc && \
touch /.npmrc && chmod 777 /.npmrc && \
mkdir /.cache && chmod 777 /.cache && \
mkdir /.yarn && chmod 777 /.yarn && \
mkdir /.npm && chmod 777 /.npm

# Set storage location for verdaccio
ENV VERDACCIO_STORAGE_PATH /tmp/verdaccio
ENV PUBLISH true

# Switch to expected workdir
WORKDIR /tmp

COPY adduser /tmp/adduser
COPY loginuser /tmp/loginuser
COPY entrypoint /tmp/entrypoint

ENTRYPOINT ["/tmp/entrypoint"]
37 changes: 37 additions & 0 deletions local-theia-build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Local Theia Build

## Prerequisites

All required tools to build Theia locally can be found

```sh
docker build -t local-theia-builder -f local-theia-build.Dockerfile ./docker/local-theia-build
```

## Local Build

```sh
# switch to your checked out theia code
cd ~/git/theia

# optional: if you built Theia locally before, you may want to clean local changes in order to get a reproducible clean build
# git clean -xfd

# export the location where you want the local registry to store your results
export VERDACCIO_STORAGE_PATH=~/tmp/verdaccio

# build Theia with our builder image
docker run --rm \
-v ${PWD}:/tmp/theia \
-v ${VERDACCIO_STORAGE_PATH}:/tmp/verdaccio \
-u $(id -u ${USER}):$(id -g ${USER}) \
-p=4873:4873 \
local-theia-builder

# If you want to keep the results, also mount verdaccio dir:
# -v ${VERDACCIO_STORAGE_PATH}:/tmp/verdaccio \
# or use the published version
# ghcr.io/eclipse-theia/theia-blueprint/blueprint-theia-builder:latest
```

The verdaccio registry serving the next build is available at <http://localhost:4873/>.

0 comments on commit 7e2bbed

Please sign in to comment.