Skip to content

Commit 235afd7

Browse files
sampsonjwrightj3
andauthored
v2.13.0 (#39)
* latest assets, kube branch, docker platform handling * remove non bake builds * add docker bake for builds * Test Docker build with single target * Test Docker build with all targets * Set Docker bake to push images * Set build trigger to main * prepare 2.13.0, portal-core-components 2.13.0 --------- Co-authored-by: Justin Wright <[email protected]>
1 parent dfe8e62 commit 235afd7

File tree

20 files changed

+742
-100
lines changed

20 files changed

+742
-100
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Docker Publish
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
tags: [ 'v*' ]
7+
env:
8+
GCP_ARTIFACT_HOST: ${{ vars.SHARED_WIF_LOCATON }}-docker.pkg.dev
9+
GCP_REGISTRY: ${{ vars.SHARED_WIF_LOCATON }}-docker.pkg.dev/${{ vars.SHARED_WIF_PROJECT }}/${{ vars.SHARED_WIF_REPO }}
10+
GCP_BEI_REGISTRY: ${{ vars.SHARED_WIF_LOCATON }}-docker.pkg.dev/${{ vars.SHARED_WIF_PROJECT }}/bei
11+
12+
jobs:
13+
docker-publish:
14+
runs-on: ubuntu-latest
15+
permissions:
16+
id-token: write
17+
contents: read
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Google Auth
23+
id: 'auth'
24+
uses: 'google-github-actions/auth@v2'
25+
with:
26+
workload_identity_provider: "${{ vars.SHARED_WIF_PROVIDER }}"
27+
service_account: "${{ vars.SHARED_WIF_SERVICE_ACCOUNT }}"
28+
token_format: 'access_token'
29+
30+
- name: Docker Login
31+
uses: 'docker/login-action@v3'
32+
with:
33+
registry: ${{ env.GCP_ARTIFACT_HOST }}
34+
username: 'oauth2accesstoken'
35+
password: ${{ steps.auth.outputs.access_token }}
36+
37+
- name: Docker Buildx Setup
38+
uses: docker/setup-buildx-action@v3
39+
40+
- name: Docker Metadata
41+
id: meta
42+
uses: docker/metadata-action@v5
43+
with:
44+
images: ${{ env.GCP_REGISTRY }}/__service__
45+
tags: |
46+
type=raw,value=v-latest
47+
type=ref,event=tag
48+
type=sha
49+
flavor: |
50+
latest=false
51+
52+
- name: Docker Build
53+
uses: docker/bake-action@v6
54+
env:
55+
REPO: ${{ env.GCP_BEI_REGISTRY }}
56+
with:
57+
source: .
58+
targets: |
59+
portal-data-availability
60+
portal-data-product-detail
61+
portal-explore-data-products
62+
portal-prototype-data
63+
portal-samples
64+
portal-taxon
65+
files: |
66+
./docker-bake.hcl
67+
${{ steps.meta.outputs.bake-file }}
68+
push: true
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#-------------------------------------------------------------------------------
2+
# Builder container for reproducible build environment
3+
4+
FROM portal-react-apps-parent:latest-builder-base AS builder-parent
5+
FROM portal-react-apps/node:current AS builder
6+
7+
ARG YARN_VERSION
8+
9+
RUN corepack enable && corepack prepare yarn@${YARN_VERSION} --activate
10+
11+
WORKDIR /usr/src/app
12+
13+
# Copy react app and parent modules
14+
COPY . /usr/src/app/build-temp/portal-react-apps
15+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/node_module[s] \
16+
/usr/src/app/build-temp/portal-react-apps/node_modules
17+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/.yarn \
18+
/usr/src/app/build-temp/portal-react-apps/.yarn
19+
# Copy app specific modules
20+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/apps/data-availability/node_module[s] \
21+
/usr/src/app/build-temp/portal-react-apps/apps/data-availability/node_modules
22+
23+
# Build the data-availability app
24+
RUN cd /usr/src/app/build-temp/portal-react-apps/apps/data-availability \
25+
&& yarn run build
26+
# Move build to working directory
27+
RUN mv /usr/src/app/build-temp/portal-react-apps/apps/data-availability/build /usr/src/app/
28+
29+
# Remove source files
30+
RUN rm -rf /usr/src/app/build-temp
31+
32+
#-------------------------------------------------------------------------------
33+
# Build production container with only necessary artifacts
34+
35+
FROM portal-web-server-builder:current AS server-builder-parent
36+
FROM alpine:3.20
37+
38+
EXPOSE 3012
39+
40+
WORKDIR /opt/go/app
41+
42+
COPY --from=builder /usr/src/app .
43+
COPY --from=server-builder-parent /usr/src/app/go-web-server .
44+
45+
ENV PORTAL_PORT=3012
46+
ENV PORTAL_CLIENT_ROUTE="/visualizations/data-availability"
47+
48+
RUN addgroup --gid 1301 portal-react \
49+
&& adduser -u 444 -D -G portal-react portal-react \
50+
&& chown -R portal-react:portal-react /opt/go/app \
51+
&& cd /home/portal-react \
52+
&& mkdir -p config/portal/apps
53+
54+
USER portal-react
55+
56+
ENTRYPOINT exec ./server \
57+
-port=$PORTAL_PORT \
58+
-app-client-route=$PORTAL_CLIENT_ROUTE \
59+
-app-api-host=$REACT_APP_NEON_API_HOST \
60+
-app-web-host=$REACT_APP_NEON_WEB_HOST \
61+
-app-api-token=$REACT_APP_NEON_SERVICE_API_TOKEN \
62+
-app-auth-silent-type=$REACT_APP_NEON_AUTH_SILENT_TYPE \
63+
-app-cookie-domain=$PORTAL_SERVER_APP_COOKIE_DOMAIN

apps/data-availability/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "data-availability",
3-
"version": "2.12.0",
3+
"version": "2.13.0",
44
"private": true,
55
"homepage": "https://localhost/visualizations/data-availability",
66
"dependencies": {
@@ -19,7 +19,7 @@
1919
"core-js": "^3.37.1",
2020
"lodash": "^4.17.21",
2121
"moment": "^2.30.1",
22-
"portal-core-components": "github:NEONScience/portal-core-components#v2.12.0",
22+
"portal-core-components": "github:NEONScience/portal-core-components#v2.13.0",
2323
"prop-types": "^15.8.1",
2424
"react": "^17.0.2",
2525
"react-dom": "^17.0.2",
@@ -57,11 +57,11 @@
5757
"lint:fix": "(npx eslint --fix src/ --ext .js,.jsx,.ts,.tsx || true) && exit 0",
5858
"checks": "npm run build:sync-assets && yarn run lint && yarn run build",
5959
"checks:docker": "npm run build:docker-sync-assets && npm run lint:docker && npm run build:docker",
60-
"start:docker": "docker run --rm --tty --interactive --workdir=/app/apps/data-availability --publish=3012:3012 portal-react-apps/data-availability:latest-builder-base yarn run start",
61-
"start:docker-prod": "docker run --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/data-availability/build --workdir=/app/apps/data-availability --publish=3000:3000 portal-react-apps/data-availability:latest-builder-base yarn run start:prod",
62-
"build:docker": "docker run --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/data-availability/build --workdir=/app/apps/data-availability portal-react-apps/data-availability:latest-builder-base yarn run build",
63-
"lint:docker": "docker run --rm --tty --interactive --workdir=/app/apps/data-availability portal-react-apps/data-availability:latest-builder-base yarn run lint",
64-
"build:docker-sync-assets": "docker run --rm --tty --interactive --volume=/$(pwd)/public:/app/apps/data-availability/public --workdir=/app/apps/data-availability portal-react-apps/data-availability:latest-builder-base npm run build:sync-assets"
60+
"start:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --workdir=/app/apps/data-availability --publish=3012:3012 portal-react-apps/data-availability:latest-builder-base yarn run start",
61+
"start:docker-prod": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/data-availability/build --workdir=/app/apps/data-availability --publish=3000:3000 portal-react-apps/data-availability:latest-builder-base yarn run start:prod",
62+
"build:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/data-availability/build --workdir=/app/apps/data-availability portal-react-apps/data-availability:latest-builder-base yarn run build",
63+
"lint:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --workdir=/app/apps/data-availability portal-react-apps/data-availability:latest-builder-base yarn run lint",
64+
"build:docker-sync-assets": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/public:/app/apps/data-availability/public --workdir=/app/apps/data-availability portal-react-apps/data-availability:latest-builder-base npm run build:sync-assets"
6565
},
6666
"browserslist": {
6767
"production": [
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#-------------------------------------------------------------------------------
2+
# Builder container for reproducible build environment
3+
4+
FROM portal-react-apps-parent:latest-builder-base AS builder-parent
5+
FROM portal-react-apps/node:current AS builder
6+
7+
ARG YARN_VERSION
8+
9+
RUN corepack enable && corepack prepare yarn@${YARN_VERSION} --activate
10+
11+
WORKDIR /usr/src/app
12+
13+
# Copy react app and parent modules
14+
COPY . /usr/src/app/build-temp/portal-react-apps
15+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/node_module[s] \
16+
/usr/src/app/build-temp/portal-react-apps/node_modules
17+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/.yarn \
18+
/usr/src/app/build-temp/portal-react-apps/.yarn
19+
# Copy app specific modules
20+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/apps/data-product-detail/node_module[s] \
21+
/usr/src/app/build-temp/portal-react-apps/apps/data-product-detail/node_modules
22+
23+
# Install dependencies and build app
24+
RUN cd /usr/src/app/build-temp/portal-react-apps/apps/data-product-detail \
25+
&& yarn run build
26+
# Move build to working directory
27+
RUN mv /usr/src/app/build-temp/portal-react-apps/apps/data-product-detail/build /usr/src/app/
28+
29+
# Remove source files
30+
RUN rm -rf /usr/src/app/build-temp
31+
32+
#-------------------------------------------------------------------------------
33+
# Build production container with only necessary artifacts
34+
35+
FROM portal-web-server-builder:current AS server-builder-parent
36+
FROM alpine:3.20
37+
38+
EXPOSE 3004
39+
40+
WORKDIR /opt/go/app
41+
42+
COPY --from=builder /usr/src/app .
43+
COPY --from=server-builder-parent /usr/src/app/go-web-server .
44+
45+
# Set app wide env variables
46+
ENV PORTAL_PORT=3004
47+
ENV PORTAL_CLIENT_ROUTE="/data-products"
48+
ENV PORTAL_WEB_SERVER_METADATA_TYPE="DataProduct"
49+
50+
RUN addgroup --gid 1301 portal-react \
51+
&& adduser -u 444 -D -G portal-react portal-react \
52+
&& chown -R portal-react:portal-react /opt/go/app \
53+
&& cd /home/portal-react \
54+
&& mkdir -p config/portal/apps
55+
56+
USER portal-react
57+
58+
ENTRYPOINT exec ./server \
59+
-port=$PORTAL_PORT \
60+
-app-client-route=$PORTAL_CLIENT_ROUTE \
61+
-app-api-host=$REACT_APP_NEON_API_HOST \
62+
-app-web-host=$REACT_APP_NEON_WEB_HOST \
63+
-app-api-token=$REACT_APP_NEON_SERVICE_API_TOKEN \
64+
-app-auth-silent-type=$REACT_APP_NEON_AUTH_SILENT_TYPE \
65+
-app-cookie-domain=$PORTAL_SERVER_APP_COOKIE_DOMAIN \
66+
-metadata-type=$PORTAL_WEB_SERVER_METADATA_TYPE \
67+
-metadata-url=$PORTAL_APP_METADATA_URL \
68+
-metadata-enforce-release-regex=$METADATA_ENFORCE_RELEASE_REGEX \
69+
-redis-host=$REDIS_HOST \
70+
-redis-port=$REDIS_PORT \
71+
-redis-user=$REDIS_USER \
72+
-redis-pass=$REDIS_PASS \
73+
-redis-db=$REDIS_DB

apps/data-product-detail/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "portal-data-products",
3-
"version": "2.12.0",
3+
"version": "2.13.0",
44
"private": true,
55
"homepage": "http://localhost/data-products/",
66
"dependencies": {
@@ -18,7 +18,7 @@
1818
"lodash": "^4.17.21",
1919
"material-table": "^1.69.3",
2020
"moment": "2.30.1",
21-
"portal-core-components": "github:NEONScience/portal-core-components#v2.12.0",
21+
"portal-core-components": "github:NEONScience/portal-core-components#v2.13.0",
2222
"prop-types": "^15.8.1",
2323
"react": "^17.0.2",
2424
"react-copy-to-clipboard": "^5.1.0",
@@ -54,11 +54,11 @@
5454
"eject": "react-scripts eject",
5555
"checks": "npm run build:sync-assets && yarn run lint && yarn run build",
5656
"checks:docker": "npm run build:docker-sync-assets && npm run lint:docker && npm run build:docker",
57-
"start:docker": "docker run --rm --tty --interactive --workdir=/app/apps/data-product-detail --publish=3012:3012 portal-react-apps/data-product-detail:latest-builder-base yarn run start",
58-
"start:docker-prod": "docker run --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/data-product-detail/build --workdir=/app/apps/data-product-detail --publish=3000:3000 portal-react-apps/data-product-detail:latest-builder-base yarn run start:prod",
59-
"build:docker": "docker run --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/data-product-detail/build --workdir=/app/apps/data-product-detail portal-react-apps/data-product-detail:latest-builder-base yarn run build",
60-
"lint:docker": "docker run --rm --tty --interactive --workdir=/app/apps/data-product-detail portal-react-apps/data-product-detail:latest-builder-base yarn run lint",
61-
"build:docker-sync-assets": "docker run --rm --tty --interactive --volume=/$(pwd)/public:/app/apps/data-product-detail/public --workdir=/app/apps/data-product-detail portal-react-apps/data-product-detail:latest-builder-base npm run build:sync-assets"
57+
"start:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --workdir=/app/apps/data-product-detail --publish=3012:3012 portal-react-apps/data-product-detail:latest-builder-base yarn run start",
58+
"start:docker-prod": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/data-product-detail/build --workdir=/app/apps/data-product-detail --publish=3000:3000 portal-react-apps/data-product-detail:latest-builder-base yarn run start:prod",
59+
"build:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/data-product-detail/build --workdir=/app/apps/data-product-detail portal-react-apps/data-product-detail:latest-builder-base yarn run build",
60+
"lint:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --workdir=/app/apps/data-product-detail portal-react-apps/data-product-detail:latest-builder-base yarn run lint",
61+
"build:docker-sync-assets": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/public:/app/apps/data-product-detail/public --workdir=/app/apps/data-product-detail portal-react-apps/data-product-detail:latest-builder-base npm run build:sync-assets"
6262
},
6363
"browserslist": {
6464
"production": [
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#-------------------------------------------------------------------------------
2+
# Builder container for reproducible build environment
3+
4+
FROM portal-react-apps-parent:latest-builder-base AS builder-parent
5+
FROM portal-react-apps/node:current AS builder
6+
7+
ARG YARN_VERSION
8+
9+
RUN corepack enable && corepack prepare yarn@${YARN_VERSION} --activate
10+
11+
WORKDIR /usr/src/app
12+
13+
# Copy react app and parent modules
14+
COPY . /usr/src/app/build-temp/portal-react-apps
15+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/node_module[s] \
16+
/usr/src/app/build-temp/portal-react-apps/node_modules
17+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/.yarn \
18+
/usr/src/app/build-temp/portal-react-apps/.yarn
19+
# Copy app specific modules
20+
COPY --from=builder-parent /usr/src/app/build-stage/portal-react-apps/apps/explore-data-products/node_module[s] \
21+
/usr/src/app/build-temp/portal-react-apps/apps/explore-data-products/node_modules
22+
23+
# Build the explore-data-products app
24+
RUN cd /usr/src/app/build-temp/portal-react-apps/apps/explore-data-products \
25+
&& yarn run build
26+
# Move build to working directory
27+
RUN mv /usr/src/app/build-temp/portal-react-apps/apps/explore-data-products/build /usr/src/app/
28+
29+
# Remove source files
30+
RUN rm -rf /usr/src/app/build-temp
31+
32+
#-------------------------------------------------------------------------------
33+
# Build production container with only necessary artifacts
34+
35+
FROM portal-web-server-builder:current AS server-builder-parent
36+
FROM alpine:3.20
37+
38+
EXPOSE 3000
39+
40+
WORKDIR /opt/go/app
41+
42+
COPY --from=builder /usr/src/app .
43+
COPY --from=server-builder-parent /usr/src/app/go-web-server .
44+
45+
ENV PORTAL_PORT=3000
46+
ENV PORTAL_CLIENT_ROUTE="/data-products/explore"
47+
48+
RUN addgroup --gid 1301 portal-react \
49+
&& adduser -u 444 -D -G portal-react portal-react \
50+
&& chown -R portal-react:portal-react /opt/go/app \
51+
&& cd /home/portal-react \
52+
&& mkdir -p config/portal/apps
53+
54+
USER portal-react
55+
56+
ENTRYPOINT exec ./server \
57+
-port=$PORTAL_PORT \
58+
-app-client-route=$PORTAL_CLIENT_ROUTE \
59+
-app-api-host=$REACT_APP_NEON_API_HOST \
60+
-app-web-host=$REACT_APP_NEON_WEB_HOST \
61+
-app-api-token=$REACT_APP_NEON_SERVICE_API_TOKEN \
62+
-app-auth-silent-type=$REACT_APP_NEON_AUTH_SILENT_TYPE \
63+
-app-cookie-domain=$PORTAL_SERVER_APP_COOKIE_DOMAIN

apps/explore-data-products/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "explore-data-products",
3-
"version": "2.12.0",
3+
"version": "2.13.0",
44
"private": true,
55
"homepage": "https://localhost/data-products/explore",
66
"dependencies": {
@@ -14,7 +14,7 @@
1414
"jspdf": "^2.5.1",
1515
"lodash": "^4.17.21",
1616
"moment": "2.30.1",
17-
"portal-core-components": "github:NEONScience/portal-core-components#v2.12.0",
17+
"portal-core-components": "github:NEONScience/portal-core-components#v2.13.0",
1818
"prop-types": "^15.8.1",
1919
"react": "^17.0.2",
2020
"react-dom": "^17.0.2",
@@ -47,11 +47,11 @@
4747
"eject": "react-scripts eject",
4848
"checks": "npm run build:sync-assets && yarn run lint && yarn run build",
4949
"checks:docker": "npm run build:docker-sync-assets && npm run lint:docker && npm run build:docker",
50-
"start:docker": "docker run --rm --tty --interactive --workdir=/app/apps/explore-data-products --publish=3011:3011 portal-react-apps/explore-data-products:latest-builder-base yarn run start",
51-
"start:docker-prod": "docker run --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/explore-data-products/build --workdir=/app/apps/explore-data-products --publish=3000:3000 portal-react-apps/explore-data-products:latest-builder-base yarn run start:prod",
52-
"build:docker": "docker run --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/explore-data-products/build --workdir=/app/apps/explore-data-products portal-react-apps/explore-data-products:latest-builder-base yarn run build",
53-
"lint:docker": "docker run --rm --tty --interactive --workdir=/app/apps/explore-data-products portal-react-apps/explore-data-products:latest-builder-base yarn run lint",
54-
"build:docker-sync-assets": "docker run --rm --tty --interactive --volume=/$(pwd)/public:/app/apps/explore-data-products/public --workdir=/app/apps/explore-data-products portal-react-apps/explore-data-products:latest-builder-base npm run build:sync-assets"
50+
"start:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --workdir=/app/apps/explore-data-products --publish=3011:3011 portal-react-apps/explore-data-products:latest-builder-base yarn run start",
51+
"start:docker-prod": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/explore-data-products/build --workdir=/app/apps/explore-data-products --publish=3000:3000 portal-react-apps/explore-data-products:latest-builder-base yarn run start:prod",
52+
"build:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/build:/app/apps/explore-data-products/build --workdir=/app/apps/explore-data-products portal-react-apps/explore-data-products:latest-builder-base yarn run build",
53+
"lint:docker": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --workdir=/app/apps/explore-data-products portal-react-apps/explore-data-products:latest-builder-base yarn run lint",
54+
"build:docker-sync-assets": "docker run --platform=$(docker system info --format '{{.OSType}}/{{.Architecture}}') --rm --tty --interactive --volume=/$(pwd)/public:/app/apps/explore-data-products/public --workdir=/app/apps/explore-data-products portal-react-apps/explore-data-products:latest-builder-base npm run build:sync-assets"
5555
},
5656
"browserslist": {
5757
"production": [

0 commit comments

Comments
 (0)