Merge pull request #88 from authorizerdev/fix/app-code-spliting
Fix/app code spliting
This commit is contained in:
commit
5ed669e0da
|
@ -6,4 +6,6 @@ README.md
|
||||||
ROADMAP.md
|
ROADMAP.md
|
||||||
build
|
build
|
||||||
.env
|
.env
|
||||||
data.db
|
data.db
|
||||||
|
app/node_modules
|
||||||
|
app/build
|
22
.github/workflows/release.yaml
vendored
22
.github/workflows/release.yaml
vendored
|
@ -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
1
.gitignore
vendored
|
@ -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
|
||||||
|
|
21
Dockerfile
21
Dockerfile
|
@ -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" ]
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -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:
|
||||||
|
|
|
@ -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
11
app/esbuild.config.js
Normal 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__,
|
||||||
|
});
|
|
@ -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",
|
||||||
|
|
|
@ -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
16
app/src/index.css
Normal 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;
|
||||||
|
}
|
|
@ -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'));
|
||||||
|
|
|
@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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>
|
Loading…
Reference in New Issue
Block a user