Skip to content

Commit

Permalink
Allow to build blueprint based on local Theia sources
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 Sep 27, 2023
1 parent 249a6ff commit 2d596b5
Show file tree
Hide file tree
Showing 5 changed files with 161 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/."
41 changes: 41 additions & 0 deletions docker/local-theia-build/entrypoint
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/bin/sh
set -e

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

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


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

if [ "$#" -eq 0 ]
then
echo "Waiting..."
wait $VERDACCIO_PID
fi
34 changes: 34 additions & 0 deletions local-theia-build.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# 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 && \
# 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 entrypoint /tmp/entrypoint

ENTRYPOINT ["/tmp/entrypoint"]
32 changes: 32 additions & 0 deletions local-theia-build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# 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
# or use the published version
# ghcr.io/eclipse-theia/theia-blueprint/blueprint-theia-builder:latest
```

0 comments on commit 2d596b5

Please sign in to comment.