Skip to content

Commit 45248e5

Browse files
authored
Merge pull request #26 from Aquaveo/gilabmaster
Gitlabmaster
2 parents 7452361 + 65a87fe commit 45248e5

File tree

107 files changed

+2111
-2490
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+2111
-2490
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,5 +182,11 @@ dmypy.json
182182
# pytype static role analyzer
183183
.pytype/
184184

185+
# vscode
186+
.vscode/
187+
185188
## Misc
186189
sample_data/**
190+
/aws_config.json
191+
/app/return-periods.zarr
192+
/app/package-metadata-table.parquet

.gitlab-ci.yml

Lines changed: 30 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,80 +2,43 @@ stages:
22
- Build
33
- Deploy
44

5+
include:
6+
- project: "tethys/kubernetes/gl-k8s-integration"
7+
ref: 1.6.1
8+
file: "/helm-check.yml"
9+
- project: "tethys/kubernetes/gl-k8s-integration"
10+
ref: 1.6.1
11+
file: "/kaniko-build.yml"
12+
513
### Build ###
614
"Check Helm":
715
stage: Build
8-
image: docker.aquaveo.com/tethys/kubernetes/helm-docker:0.7.1
916
variables:
10-
GIT_SUBMODULE_STRATEGY: none
17+
HELM_REPO_URL: https://eccr.ecmwf.int
18+
HELM_REPO_CHANNEL: geoglows_api
19+
HELM_REPO_USERNAME: $ECCR_USER
20+
HELM_REPO_PASSWORD: $ECCR_PASSWORD
1121
HELM_CHART: $CI_PROJECT_DIR/helm/gsprestapi
1222
script:
1323
# Ensure all required variables are set
1424
- ": \"${HELM_CHART:?must be set}\""
15-
- helm lint $HELM_CHART
1625
- chmod +x ./check_helm_chart
1726
- ./check_helm_chart $HELM_CHART
18-
except:
19-
- tags
20-
- master
2127

2228
"Update Helm":
2329
stage: Build
24-
image: docker.aquaveo.com/tethys/kubernetes/helm-docker:0.7.1
2530
variables:
26-
GIT_SUBMODULE_STRATEGY: none
27-
HELM_REPO_USERNAME: aquaveo
31+
HELM_REPO_URL: https://eccr.ecmwf.int
32+
HELM_REPO_CHANNEL: geoglows_api
33+
HELM_REPO_USERNAME: $ECCR_USER
34+
HELM_REPO_PASSWORD: $ECCR_PASSWORD
2835
HELM_CHART: $CI_PROJECT_DIR/helm/gsprestapi
2936
script:
3037
# Ensure all required variables are set
3138
- ": \"${HELM_CHART:?must be set}\""
32-
- ": \"${HELM_KEY_PASSPHRASE:?must be set}\""
33-
- ": \"${HELM_REPO_PASSWORD:?must be set}\""
3439
- helm lint $HELM_CHART
3540
- chmod +x ./check_helm_chart
3641
- ./check_helm_chart $HELM_CHART --upload
37-
only:
38-
- master
39-
40-
.kaniko_build:
41-
stage: Build
42-
image:
43-
name: gcr.io/kaniko-project/executor:debug-v0.23.0
44-
entrypoint: [""]
45-
variables:
46-
GIT_SUBMODULE_STRATEGY: recursive
47-
before_script:
48-
- >
49-
echo "{\"auths\":{
50-
\"$CI_REGISTRY\": {\"username\":\"$CI_REGISTRY_USER\", \"password\":\"$CI_REGISTRY_PASSWORD\"},
51-
\"eccr.ecmwf.int/harbor\": {\"username\":\"$ECCR_USER\", \"password\":\"$ECCR_PASSWORD\"}
52-
}}" > /kaniko/.docker/config.json
53-
script:
54-
# Ensure all required variables are set
55-
- ": \"${KANIKO_DOCKERFILE:?must be set}\""
56-
- ": \"${KANIKO_CONTEXT:?must be set}\""
57-
- ": \"${KANIKO_DESTINATIONS:?must be set}\""
58-
# Run Kaniko
59-
- export KANIKO_CMD="/kaniko/executor
60-
--context $KANIKO_CONTEXT
61-
--dockerfile $KANIKO_DOCKERFILE
62-
$(for DEST in $KANIKO_DESTINATIONS; do echo "--destination $DEST "; done)
63-
--cache=true
64-
--cache-repo $CI_REGISTRY_IMAGE/cache
65-
--force"
66-
- echo $KANIKO_CMD
67-
- $KANIKO_CMD
68-
69-
"Build Commit":
70-
extends: .kaniko_build
71-
variables:
72-
GIT_SUBMODULE_STRATEGY: recursive
73-
KANIKO_CONTEXT: $CI_PROJECT_DIR
74-
KANIKO_DOCKERFILE: $CI_PROJECT_DIR/Dockerfile
75-
KANIKO_DESTINATIONS: $CI_REGISTRY_IMAGE/dev:$CI_COMMIT_SHORT_SHA
76-
77-
except:
78-
- tags
7942

8043
"Build Tag":
8144
extends: .kaniko_build
@@ -86,6 +49,12 @@ stages:
8649
KANIKO_DESTINATIONS: >
8750
eccr.ecmwf.int/geoglows_api/geoglows_api:$CI_COMMIT_TAG
8851
eccr.ecmwf.int/geoglows_api/geoglows_api:latest
52+
before_script:
53+
- >
54+
echo "{\"auths\":{
55+
\"$CI_REGISTRY\": {\"username\":\"$CI_REGISTRY_USER\", \"password\":\"$CI_REGISTRY_PASSWORD\"},
56+
\"eccr.ecmwf.int/harbor\": {\"username\":\"$ECCR_USER\", \"password\":\"$ECCR_PASSWORD\"}
57+
}}" > /kaniko/.docker/config.json
8958
only:
9059
- tags
9160

@@ -95,13 +64,19 @@ stages:
9564
KANIKO_CONTEXT: $CI_PROJECT_DIR
9665
KANIKO_DOCKERFILE: $CI_PROJECT_DIR/Dockerfile
9766
KANIKO_DESTINATIONS: eccr.ecmwf.int/geoglows_api/geoglows_api:stable
67+
before_script:
68+
- >
69+
echo "{\"auths\":{
70+
\"$CI_REGISTRY\": {\"username\":\"$CI_REGISTRY_USER\", \"password\":\"$CI_REGISTRY_PASSWORD\"},
71+
\"eccr.ecmwf.int/harbor\": {\"username\":\"$ECCR_USER\", \"password\":\"$ECCR_PASSWORD\"}
72+
}}" > /kaniko/.docker/config.json
9873
only:
9974
- /^stable$/
10075

10176
### DEPLOY ###
10277
"Deploy to Staging":
10378
stage: Deploy
104-
image: docker.aquaveo.com/tethys/kubernetes/helm-docker:2.0.0-rc1
79+
image: aquaveollc/helm-docker:0.3.1
10580
dependencies: [] # Deploys do not depend on the Build phase artifacts
10681
variables:
10782
GIT_SUBMODULE_STRATEGY: none
@@ -115,7 +90,7 @@ stages:
11590

11691
"Deploy to Production":
11792
stage: Deploy
118-
image: docker.aquaveo.com/tethys/kubernetes/helm-docker:2.0.0-rc1
93+
image: aquaveollc/helm-docker:0.3.1
11994
dependencies: [] # Deploys do not depend on the Build phase artifacts
12095
variables:
12196
GIT_SUBMODULE_STRATEGY: none
@@ -126,5 +101,3 @@ stages:
126101
when: manual
127102
only:
128103
- tags
129-
130-

Dockerfile

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,42 @@
1-
FROM continuumio/miniconda3:latest
1+
FROM mambaorg/micromamba
22

3-
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 PATH=/opt/conda/envs/gsp_api/bin:$PATH API_PREFIX=/api
3+
USER root
44

5-
# For Development On Analytics Only:
6-
# ENV AWS_ACCESS_KEY_ID=
7-
# ENV AWS_SECRET_ACCESS_KEY=
8-
# ENV AWS_LOG_GROUP_NAME=
9-
# ENV AWS_LOG_STREAM_NAME=
10-
# ENV AWS_REGION=
5+
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
6+
ENV PATH=/opt/conda/envs/app-env/bin:$PATH
7+
ENV API_PREFIX=/api
8+
ENV PYTHONPATH=$PYTHONPATH:/app
119

12-
RUN mkdir /var/uwsgi
10+
COPY --chown=$MAMBA_USER:$MAMBA_USER environment.yaml /environment.yaml
11+
COPY startup.sh /startup.sh
12+
COPY app /app
1313

14-
RUN apt-get update -qq && apt-get install -yqq supervisor vim
14+
WORKDIR /
1515

16-
COPY ./environment.yml ./startup.sh ./
16+
RUN mkdir -p /var/log/uwsgi
17+
RUN apt-get update && apt-get install -y --no-install-recommends curl vim awscli && rm -rf /var/lib/apt/lists/*
1718

18-
RUN conda config --set channel_priority strict && \
19-
conda config --add channels conda-forge && \
20-
conda env create -f environment.yml && \
21-
echo "conda activate gsp_api" >> ~/.bashrc
19+
# startup.sh is a helper script
20+
RUN chmod +x /startup.sh
21+
RUN micromamba create -n app-env --yes --file "environment.yaml" && micromamba clean --all --yes
2222

23-
RUN mkdir -p /mnt/output/forecasts && \
24-
mkdir -p /mnt/output/era-interim && \
25-
mkdir -p /mnt/output/era-5 && \
26-
mkdir -p /mnt/output/forecast-records
23+
# download a copy of the package metadata table
24+
RUN wget http://geoglows-v2.s3-us-west-2.amazonaws.com/tables/v2-model-table.parquet -O /app/package-metadata-table.parquet
25+
ENV PYGEOGLOWS_METADATA_TABLE_PATH=/app/package-metadata-table.parquet
2726

28-
# COPY ./sample_data/forecasts /mnt/output/forecasts
29-
# COPY ./sample_data/era-interim /mnt/output/era-interim
30-
# COPY ./sample_data/era-5 /mnt/output/era-5
31-
# COPY ./sample_data/forecast-records /mnt/output/forecast-records
27+
# download a copy of the package metadata table with extra attributes
28+
RUN wget http://geoglows-v2.s3-us-west-2.amazonaws.com/tables/package-metadata-table.parquet -O /app/extra-metadata-table.parquet
29+
ENV PYGEOGLOWS_EXTRA_METADATA_TABLE_PATH=/app/extra-metadata-table.parquet
3230

33-
# Copy API code
34-
COPY ./GSP_API /app/GSP_API/
35-
COPY ./supervisord.conf /etc/supervisor/conf.d/uwsgi.conf
36-
37-
# startup.sh is a helper script
38-
RUN chmod +x /startup.sh
31+
ARG MAMBA_DOCKERFILE_ACTIVATE=1
32+
ENV AWS_LOG_GROUP_NAME=geoglows.ecmwf.int
33+
ENV AWS_LOG_STREAM_NAME=rest_api_metrics
34+
ENV AWS_REGION=eu-central-1
3935

4036
# Expose the port that is to be used when calling your API
4137
EXPOSE 80
38+
4239
HEALTHCHECK --interval=1m --timeout=3s --start-period=20s \
4340
CMD curl -f http://localhost/ || exit 1
44-
ENTRYPOINT [ "/startup.sh" ]
41+
42+
ENTRYPOINT [ "/startup.sh" ]

0 commit comments

Comments
 (0)