Merge pull request #88 from authorizerdev/fix/app-code-spliting

Fix/app code spliting
This commit is contained in:
Lakhan Samani 2021-12-29 05:19:20 +05:30 committed by GitHub
commit 5ed669e0da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 92 additions and 268 deletions

View File

@ -6,4 +6,6 @@ README.md
ROADMAP.md ROADMAP.md
build build
.env .env
data.db data.db
app/node_modules
app/build

View File

@ -8,26 +8,22 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
- uses: actions/setup-go@v2
with:
go-version: '^1.17.3'
- name: Install dependencies - name: Install dependencies
run: | run: |
sudo apt-get install build-essential wget zip gcc-mingw-w64 && \ sudo apt-get install build-essential wget zip gcc-mingw-w64 && \
sudo apt-get remove --auto-remove golang-go && \ echo "/usr/bin/x86_64-w64-mingw32-gcc" >> GITHUB_PATH && \
sudo rm -rf /usr/bin/go &&\
wget --progress=dot:mega https://golang.org/dl/go1.17.1.linux-amd64.tar.gz -O go-linux.tar.gz && \
sudo tar -zxf go-linux.tar.gz && \
sudo mv go /usr/bin/ && \
sudo mkdir -p /go/bin /go/src /go/pkg && \
export GO_HOME=/usr/bin/go && \
export GOPATH=/go && \
export PATH=${GOPATH}/bin:${GO_HOME}/bin/:$PATH && \
echo "/usr/bin/go/bin" >> $GITHUB_PATH
echo "/usr/bin/x86_64-w64-mingw32-gcc" >> GITHUB_PATH
go version && \
wget --no-check-certificate --progress=dot:mega https://github.com/wangyoucao577/assets-uploader/releases/download/v0.3.0/github-assets-uploader-v0.3.0-linux-amd64.tar.gz -O github-assets-uploader.tar.gz && \ wget --no-check-certificate --progress=dot:mega https://github.com/wangyoucao577/assets-uploader/releases/download/v0.3.0/github-assets-uploader-v0.3.0-linux-amd64.tar.gz -O github-assets-uploader.tar.gz && \
tar -zxf github-assets-uploader.tar.gz && \ tar -zxf github-assets-uploader.tar.gz && \
sudo mv github-assets-uploader /usr/sbin/ && \ sudo mv github-assets-uploader /usr/sbin/ && \
sudo rm -f github-assets-uploader.tar.gz && \ sudo rm -f github-assets-uploader.tar.gz && \
github-assets-uploader -version github-assets-uploader -version && \
make build-app
- name: Print Go paths - name: Print Go paths
run: whereis go run: whereis go
- name: Print Go Version - name: Print Go Version

1
.gitignore vendored
View File

@ -2,6 +2,7 @@ server/server
server/.env server/.env
data data
app/node_modules app/node_modules
app/build
build build
.env .env
data.db data.db

View File

@ -1,5 +1,5 @@
FROM golang:1.17-alpine as builder FROM golang:1.17-alpine as go-builder
WORKDIR /app WORKDIR /authorizer
COPY server server COPY server server
COPY Makefile . COPY Makefile .
@ -7,15 +7,22 @@ ARG VERSION="latest"
ENV VERSION="$VERSION" ENV VERSION="$VERSION"
RUN echo "$VERSION" RUN echo "$VERSION"
RUN apk add build-base nodejs &&\ RUN apk add build-base &&\
make clean && make && \ make clean && make && \
chmod 777 build/server chmod 777 build/server
FROM alpine:latest FROM node:17-alpine3.12 as node-builder
RUN apk --no-cache add ca-certificates WORKDIR /authorizer
WORKDIR /root/
COPY app app COPY app app
COPY Makefile .
RUN apk add build-base &&\
make build-app
FROM alpine:latest
WORKDIR /root/
RUN mkdir app
COPY --from=node-builder /authorizer/app/build app/build
COPY --from=go-builder /authorizer/build build
COPY templates templates COPY templates templates
COPY --from=builder /app/build build
EXPOSE 8080 EXPOSE 8080
CMD [ "./build/server" ] CMD [ "./build/server" ]

View File

@ -3,6 +3,8 @@ VERSION := $(or $(VERSION),$(DEFAULT_VERSION))
cmd: cmd:
cd server && go build -ldflags "-w -X main.VERSION=$(VERSION)" -o '../build/server' cd server && go build -ldflags "-w -X main.VERSION=$(VERSION)" -o '../build/server'
build-app:
cd app && npm i && npm run build
clean: clean:
rm -rf build rm -rf build
test: test:

View File

@ -1,16 +0,0 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #374151;
font-size: 14px;
}
*,
*:before,
*:after {
box-sizing: inherit;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

11
app/esbuild.config.js Normal file
View File

@ -0,0 +1,11 @@
const __is_prod__ = process.env.NODE_ENV === 'production';
require('esbuild').build({
entryPoints: ['src/index.tsx'],
chunkNames: '[name]-[hash]',
bundle: true,
minify: __is_prod__,
outdir: 'build',
splitting: true,
format: 'esm',
watch: !__is_prod__,
});

View File

@ -4,13 +4,14 @@
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"build": "esbuild src/index.tsx --bundle --minify --sourcemap --outfile=build/bundle.js" "build": "rm -rf build && NODE_ENV=production node ./esbuild.config.js",
"start": "NODE_ENV=development node ./esbuild.config.js"
}, },
"keywords": [], "keywords": [],
"author": "Lakhan Samani", "author": "Lakhan Samani",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@authorizerdev/authorizer-react": "^0.3.0", "@authorizerdev/authorizer-react": "latest",
"@types/react": "^17.0.15", "@types/react": "^17.0.15",
"@types/react-dom": "^17.0.9", "@types/react-dom": "^17.0.9",
"esbuild": "^0.12.17", "esbuild": "^0.12.17",

View File

@ -1,9 +1,10 @@
import React, { useEffect } from 'react'; import React, { useEffect, lazy, Suspense } from 'react';
import { Switch, Route } from 'react-router-dom'; import { Switch, Route } from 'react-router-dom';
import { useAuthorizer } from '@authorizerdev/authorizer-react'; import { useAuthorizer } from '@authorizerdev/authorizer-react';
import Dashboard from './pages/dashboard';
import Login from './pages/login'; const ResetPassword = lazy(() => import('./pages/rest-password'));
import ResetPassword from './pages/rest-password'; const Login = lazy(() => import('./pages/login'));
const Dashboard = lazy(() => import('./pages/dashboard'));
export default function Root() { export default function Root() {
const { token, loading, config } = useAuthorizer(); const { token, loading, config } = useAuthorizer();
@ -24,22 +25,26 @@ export default function Root() {
if (token) { if (token) {
return ( return (
<Switch> <Suspense fallback={<></>}>
<Route path="/app" exact> <Switch>
<Dashboard /> <Route path="/app" exact>
</Route> <Dashboard />
</Switch> </Route>
</Switch>
</Suspense>
); );
} }
return ( return (
<Switch> <Suspense fallback={<></>}>
<Route path="/app" exact> <Switch>
<Login /> <Route path="/app" exact>
</Route> <Login />
<Route path="/app/reset-password"> </Route>
<ResetPassword /> <Route path="/app/reset-password">
</Route> <ResetPassword />
</Switch> </Route>
</Switch>
</Suspense>
); );
} }

16
app/src/index.css Normal file
View File

@ -0,0 +1,16 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #374151;
font-size: 14px;
}
*,
*:before,
*:after {
box-sizing: inherit;
}

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import App from './App'; import App from './App';
import './index.css';
ReactDOM.render(<App />, document.getElementById('root')); ReactDOM.render(<App />, document.getElementById('root'));

View File

@ -2,11 +2,11 @@ import React, { Fragment } from 'react';
import { AuthorizerResetPassword } from '@authorizerdev/authorizer-react'; import { AuthorizerResetPassword } from '@authorizerdev/authorizer-react';
export default function ResetPassword() { export default function ResetPassword() {
return ( return (
<Fragment> <Fragment>
<h1 style={{ textAlign: 'center' }}>Reset Password</h1> <h1 style={{ textAlign: 'center' }}>Reset Password</h1>
<br /> <br />
<AuthorizerResetPassword /> <AuthorizerResetPassword />
</Fragment> </Fragment>
); );
} }

View File

@ -1,5 +1,5 @@
VERSION="$1" VERSION="$1"
make clean && CGO_ENABLED=1 VERSION=${VERSION} make make clean && make build-app && CGO_ENABLED=1 VERSION=${VERSION} make
FILE_NAME=authorizer-${VERSION}-darwin-amd64.tar.gz FILE_NAME=authorizer-${VERSION}-darwin-amd64.tar.gz
tar cvfz ${FILE_NAME} .env app/build build templates tar cvfz ${FILE_NAME} .env app/build build templates
AUTH="Authorization: token $GITHUB_TOKEN" AUTH="Authorization: token $GITHUB_TOKEN"

View File

@ -5,13 +5,13 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title> <title>Document</title>
<link rel="stylesheet" href="/app/build/bundle.css"> <link rel="stylesheet" href="/app/build/index.css">
<script> <script>
window.__authorizer__ = {{.data}} window.__authorizer__ = {{.data}}
</script> </script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script src="/app/build/bundle.js"></script> <script type="module" src="/app/build/index.js"></script>
</body> </body>
</html> </html>