Skip to content
This repository was archived by the owner on Mar 1, 2024. It is now read-only.

Commit

Permalink
Bring Github actions to 5.2 branch (#105)
Browse files Browse the repository at this point in the history
* Added dev and prod configs to webpack (#102)
* Adding github actions to create an NPM package for frontend library and make a release for the repo (#103)
* Added workflow file for pushing library to npm
* Added workflow file for making a release with built implementation/EpicGames archives
  • Loading branch information
lukehb authored Feb 17, 2023
1 parent 4a0acfc commit 92dd46d
Show file tree
Hide file tree
Showing 12 changed files with 253 additions and 104 deletions.
31 changes: 31 additions & 0 deletions .github/workflows/container-images.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Publish the Signalling Server container image from our dev branch

on:
push:
branches: ['UE5.2']
paths: ['SignallingWebServer/**']

jobs:
signalling-server-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push the Signalling Server container image for Unreal Engine based on our development branch
uses: docker/build-push-action@v3
with:
context: ./SignallingWebServer
tags: 'ghcr.io/epicgames/pixel-streaming-signalling-server:dev'
push: true
73 changes: 73 additions & 0 deletions .github/workflows/create-gh-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Releases

on:
push:
branches: ['UE5.2']
paths: ['RELEASE_VERSION']

jobs:

build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./

permissions:
contents: write
steps:
- name: "Checkout source code"
uses: actions/checkout@v3

- name: Read the RELEASE_VERSION file
id: getversion
run: echo "version=$(cat RELEASE_VERSION)" >> $GITHUB_OUTPUT

- uses: actions/setup-node@v3
with:
node-version: '16.x'
registry-url: 'https://registry.npmjs.org'

- name: Install library deps
working-directory: ./Frontend/library
run: npm ci

- name: Build frontend lib
working-directory: ./Frontend/library
run: npm run build

- name: Install implementations/EpicGames deps
working-directory: ./Frontend/implementations/EpicGames
run: npm ci

- name: Build implementations/EpicGames
working-directory: ./Frontend/implementations/EpicGames
run: npm run build-all

- name: Make output directory for archives
run: mkdir output

- name: Archive Release tar.gz
uses: thedoctor0/[email protected]
with:
directory: './output'
path: '../'
type: 'tar'
filename: '${{ github.ref_name }}-${{ steps.getversion.outputs.version }}.tar.gz'
exclusions: '.git .github output Frontend/Docs Frontend/library/dist Frontend/library/types Frontend/library/node_modules Frontend/implementations/EpicGames/node_modules'

- name: Archive Release tar.gz
uses: thedoctor0/[email protected]
with:
directory: './output'
path: '../'
type: 'zip'
filename: '${{ github.ref_name }}-${{ steps.getversion.outputs.version }}.zip'
exclusions: '*.git* /*node_modules/* .editorconfig /*types/* /*dist/* /*output/* /*Docs/*'

- name: "Make the release"
uses: ncipollo/release-action@v1
with:
tag: "${{ github.ref_name }}-${{ steps.getversion.outputs.version }}"
artifacts: "output/${{ github.ref_name }}-${{ steps.getversion.outputs.version }}.zip,output/${{ github.ref_name }}-${{ steps.getversion.outputs.version }}.tar.gz"
generateReleaseNotes: true
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
name: Publish library package to npmjs
on:
push:
tags:
- '*'
branches: ['UE5.2']
paths: ['Frontend/library/package.json']
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./library
working-directory: Frontend/library
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
Expand Down
10 changes: 7 additions & 3 deletions Frontend/implementations/EpicGames/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@
"description": "",
"main": "player.ts",
"scripts": {
"build": "npx webpack",
"build": "npx webpack --config webpack.prod.js",
"build-dev": "npx webpack --config webpack.dev.js",
"watch": "npx webpack --watch",
"serve": "webpack serve",
"serve": "webpack serve --config webpack.dev.js",
"serve-prod": "webpack serve --config webpack.prod.js",
"install": "cd ../../library && npm run build-webpack && cd ../implementations/EpicGames && npm link ../../library",
"build-all": "npm run install && npm run build"
"install-dev": "cd ../../library && npm run build-webpack-dev && cd ../implementations/EpicGames && npm link ../../library",
"build-all": "npm run install && npm run build",
"build-all-dev": "npm run install-dev && npm run build-dev"
},
"devDependencies": {
"webpack-cli": "^5.0.1",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,85 +1,75 @@
// Copyright Epic Games, Inc. All Rights Reserved.

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const fs = require('fs');

const pages = fs.readdirSync('./src', { withFileTypes: true })
.filter(item => !item.isDirectory())
.filter(item => path.parse(item.name).ext === '.html')
.map(htmlFile => path.parse(htmlFile.name).name);

module.exports = (env) => {
return {
mode: 'development',
entry: pages.reduce((config, page) => {
config[page] = `./src/${page}.ts`;
return config;
}, {}),
plugins: [
new webpack.DefinePlugin({
WEBSOCKET_URL: JSON.stringify((env.WEBSOCKET_URL !== undefined) ? env.WEBSOCKET_URL : '')
}),
].concat(pages.map((page) => new HtmlWebpackPlugin({
title: 'Development',
template: `./src/${page}.html`,
filename: `${page}.html`,
chunks: [page],
}), )),
// turn off so we can see the source map for dom delegate so we can debug the library
devtool: 'inline-source-map',
module: {
rules: [
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: [
/node_modules/,
],
},
{
test: /\.html$/i,
use: 'html-loader'
},
{
test: /\.css$/,
type: 'asset/resource',
generator: {
filename: 'css/[name][ext]'
}
},
{
test: /\.(png|svg)$/i,
type: 'asset/resource',
generator: {
filename: 'images/[name][ext]'
}
},
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js', '.svg'],
},
output: {
filename: '[name].js',
library: 'frontend', // change this to something more meaningful
libraryTarget: 'umd',
path: path.resolve(__dirname, '../../../SignallingWebServer/Public'),
clean: true,
globalObject: 'this',
hashFunction: 'xxhash64',
},
experiments: {
futureDefaults: true
},
optimization: {
minimize: false
},
devServer: {
static: {
directory: path.join(__dirname, '../../../SignallingWebServer/Public'),
},
}
};
}
// Copyright Epic Games, Inc. All Rights Reserved.

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const fs = require('fs');

const pages = fs.readdirSync('./src', { withFileTypes: true })
.filter(item => !item.isDirectory())
.filter(item => path.parse(item.name).ext === '.html')
.map(htmlFile => path.parse(htmlFile.name).name);

module.exports = {
entry: pages.reduce((config, page) => {
config[page] = `./src/${page}.ts`;
return config;
}, {}),

plugins: [].concat(pages.map((page) => new HtmlWebpackPlugin({
title: `${page}`,
template: `./src/${page}.html`,
filename: `${page}.html`,
chunks: [page],
}), )),

module: {
rules: [
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: [
/node_modules/,
],
},
{
test: /\.html$/i,
use: 'html-loader'
},
{
test: /\.css$/,
type: 'asset/resource',
generator: {
filename: 'css/[name][ext]'
}
},
{
test: /\.(png|svg)$/i,
type: 'asset/resource',
generator: {
filename: 'images/[name][ext]'
}
},
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js', '.svg', '.json'],
},
output: {
filename: '[name].js',
library: 'epicgames-frontend',
libraryTarget: 'umd',
path: path.resolve(__dirname, '../../../SignallingWebServer/Public'),
clean: true,
globalObject: 'this',
hashFunction: 'xxhash64',
},
experiments: {
futureDefaults: true
},
devServer: {
static: {
directory: path.join(__dirname, '../../../SignallingWebServer/Public'),
},
},
}
10 changes: 10 additions & 0 deletions Frontend/implementations/EpicGames/webpack.dev.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Copyright Epic Games, Inc. All Rights Reserved.

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');
const path = require('path');

module.exports = merge(common, {
mode: 'development',
devtool: 'inline-source-map',
});
16 changes: 16 additions & 0 deletions Frontend/implementations/EpicGames/webpack.prod.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright Epic Games, Inc. All Rights Reserved.

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');

module.exports = merge(common, {
mode: 'production',
optimization: {
usedExports: true,
minimize: true
},
stats: 'errors-only',
performance: {
hints: false
}
});
7 changes: 4 additions & 3 deletions Frontend/library/package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
{
"name": "@epicgames-ps/lib-pixelstreamingfrontend-dev",
"version": "0.0.1",
"version": "0.1.0",
"description": "Frontend library for Pixel Streaming",
"main": "dist/lib-pixelstreamingfrontend.min.js",
"main": "dist/lib-pixelstreamingfrontend.js",
"types": "types/pixelstreamingfrontend.d.ts",
"scripts": {
"compile": "tsc --build --clean && tsc",
"build": "npm run build-webpack",
"build-webpack": "npx webpack",
"build-webpack": "npx webpack --config webpack.prod.js",
"build-webpack-dev": "npx webpack --config webpack.dev.js",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
"spellcheck": "cspell \"{README.md,.github/*.md,src/**/*.ts}\""
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@ const path = require('path');
const webpack = require('webpack');

module.exports = {
mode: 'development',
entry: {
index: './src/pixelstreamingfrontend.ts'
},
devtool: 'inline-source-map',
module: {
rules: [
{
Expand All @@ -28,15 +26,10 @@ module.exports = {
})
],
output: {
filename: 'lib-pixelstreamingfrontend.min.js',
library: 'lib-pixelstreamingfrontend', // exposed variable that will provide access to the library classes
libraryTarget: 'umd',
path: path.resolve(__dirname, 'dist'),
clean: false,
clean: true,
globalObject: 'this'
},
optimization: {
minimize: false
},
stats: 'errors-only'
}
};
15 changes: 15 additions & 0 deletions Frontend/library/webpack.dev.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright Epic Games, Inc. All Rights Reserved.

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');

module.exports = merge(common, {
mode: 'development',
devtool: 'inline-source-map',
devServer: {
static: './dist',
},
output: {
filename: 'lib-pixelstreamingfrontend.js',
}
});
Loading

0 comments on commit 92dd46d

Please sign in to comment.