Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add vue skeleton to host map #26

Merged
merged 18 commits into from
Jul 8, 2021
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .browserslistrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
> 1%
last 1 version
IE 11
6 changes: 6 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
VUE_APP_TITLE='gw-conditions'

VUE_APP_FOOTER_1='https://labs.waterdata.usgs.gov/visualizations/temperature-prediction/index.html#/'
VUE_APP_FOOTER_2='https://labs.waterdata.usgs.gov/visualizations/snow-to-flow/index.html#/'
VUE_APP_GITHUB_REPOSITORY_LINK='https://github.com/USGS-VIZLAB/gw-conditions'

1 change: 1 addition & 0 deletions .env.beta_tier
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VUE_APP_TIER=-beta build-
1 change: 1 addition & 0 deletions .env.prod_tier
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VUE_APP_TIER=''
1 change: 1 addition & 0 deletions .env.test_tier
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VUE_APP_TIER=-test build-
6 changes: 6 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
'extends': 'plugin:vue/recommended',
'parserOptions': {
'parser': 'babel-eslint'
}
}
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,27 @@ vignettes/*.pdf
!*/out/*.ind
.remake
build/

.DS_Store
node_modules
/dist

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.Rproj.user

12 changes: 12 additions & 0 deletions 3_visualize.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ targets:
3_visualize:
depends:
- 3_visualize/out/anomaly_peaks.svg
- src/assets/anomaly_peaks.svg

3_visualize/out/anomaly_peaks.svg:
command: build_peaks_svg(
Expand All @@ -24,3 +25,14 @@ targets:
sites_sf = gw_sites_sf,
svg_width = svg_width,
svg_height = svg_height)

src/assets/anomaly_peaks.svg:
command: send_to_vue(
target_name,
in_file = '3_visualize/out/anomaly_peaks.svg')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not necessary but one final thing is that you don't need a separate function here. You can simply make file.copy() the function for the target.

src/assets/anomaly_peaks.svg:
    command: file.copy(
        to = target_name,
        from = '3_visualize/out/anomaly_peaks.svg')

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol totally

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just need to use to = and from = because target_name has to be passed in as the first arg

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also need overwrite = TRUE in the file.copy function so this works as expected, otherwise it silently doesn't replace the to target even when the from file has changed. Remember this issue @lindsayplatt ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apparently I still haven't learned my lesson! Thanks @jread-usgs. They had that in the custom function below but I neglected to carry it over to this suggestion :)


3_visualize/out/svg_list.csv:
command: list_svg_files(
target_name,
I("src/assets"))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the cleverness of creating a list_svg_files() function to pattern match and find svg files, but with how scipiper works, this target will only build once and will not update even if new SVGs are added to src/assets. I think it would be better to set it up, where you pass in the files that you want to make it into your list explicitly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

^ though, in trying to figure out what to do, I realized that the filenames are created dynamically. This is making me wonder if we need a task table with dates instead ...

Copy link
Member Author

@cnell-usgs cnell-usgs Jul 8, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if there was an added input here that depends on the current time period dates from the config file so it is rebuilt every time that changes?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed this process for now. Similar to below, this seems like it will depend on how we store and access data in the jenkins build, and can be explored when that is resolved.


17 changes: 17 additions & 0 deletions 3_visualize/src/build_peaks_svg.R
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,22 @@ build_peaks_svg <- function(out_file, data_in, sites_sf, svg_width, svg_height)
}

xml2::write_xml(svg_root, file = out_file)
}
send_to_vue <- function(out_file, in_file){
# Copy current time period to vue
file.copy(in_file,
out_file,
overwrite = TRUE)

}
list_svg_files <- function(out_file, svg_fp = "src/assets"){
tibble(fp = list.files(svg_fp, pattern = ".svg")) %>%
mutate(date_start = as.Date(word(fp, 3, 3, sep="_"), format = "%Y%m%d"),
date_end = as.Date(word(str_replace(fp, ".svg", ""), 4, 4, sep="_"), format = "%Y%m%d")) %>%
write_csv(out_file)

# Copy to vue
file.copy(out_file,
sprintf("public/svg_files.csv"),
overwrite = TRUE)
}
32 changes: 32 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
FROM artifactory.wma.chs.usgs.gov/docker-official-mirror/debian:stretch

LABEL maintainer="[email protected]"

# Run updates and install curl
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install curl -y && \
apt-get purge -y --auto-remove && \
apt-get clean

# Enable the NodeSource repository and install the latest nodejs
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && \
apt-get install nodejs -y

# Create temp directory for building viz app
RUN mkdir -p /tmp/gw-conditions

# Copy source code
WORKDIR /tmp/gw-conditions
COPY . .
# Set environment variables for build target and tile source and then run config.sh
# to insert the correct S3 tile source URLs in the Mapbox configuration file.
ARG BUILDTARGET="test"
ARG VUE_BUILD_MODE="development"
ENV E_BUILDTARGET=$BUILDTARGET
ENV E_VUE_BUILD_MODE=$VUE_BUILD_MODE

# Build the Vue app.
RUN npm install
RUN chmod +x ./build.sh && ./build.sh

46 changes: 46 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
License
=======

Unless otherwise noted, This project is in the public domain in the United
States because it contains materials that originally came from the United
States Geological Survey, an agency of the United States Department of
Interior. For more information, see the official USGS copyright policy at
https://www2.usgs.gov/visual-id/credit_usgs.html#copyright

Additionally, we waive copyright and related rights in the work
worldwide through the CC0 1.0 Universal public domain dedication.


CC0 1.0 Universal Summary
-------------------------

This is a human-readable summary of the
[Legal Code (read the full text)][1].


### No Copyright

The person who associated a work with this deed has dedicated the work to
the public domain by waiving all of his or her rights to the work worldwide
under copyright law, including all related and neighboring rights, to the
extent allowed by law.

You can copy, modify, distribute and perform the work, even for commercial
purposes, all without asking permission.


### Other Information

In no way are the patent or trademark rights of any person affected by CC0,
nor are the rights that other persons may have in the work or in how the
work is used, such as publicity or privacy rights.

Unless expressly stated otherwise, the person who associated a work with
this deed makes no warranties about the work, and disclaims liability for
all uses of the work, to the fullest extent permitted by applicable law.
When using or citing the work, you should not imply endorsement by the
author or the affirmer.



[1]: https://creativecommons.org/publicdomain/zero/1.0/legalcode
8 changes: 8 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
presets: [
[ "@vue/app",
{
useBuiltIns: "entry"
}]
]
};
7 changes: 7 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
echo "this is the var $E_VUE_BUILD_MODE"
if [ "$E_VUE_BUILD_MODE" = "test" ]
then npm run build-test
elif [ "$E_VUE_BUILD_MODE" = "beta" ]
then npm run build-beta
else npm run build
fi
94 changes: 94 additions & 0 deletions jenkins/Jenkinsfile.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
pipeline {
agent {
node {
label 'team:makerspace-small'
}
}
triggers { pollSCM('*/5 * * * *') }
parameters {
choice(choices: ['test', 'beta', 'prod'], description: 's3 bucket that the build will target', name: 'BUILD_DEST')
choice(choices: ['test', 'beta', 'prod'], description: 'The mode selected will tell Vue which environment variables to use. Various feature flags will be disabled/enabled depending on mode. More importantly, the source of the tiles will change, with the development build loading tiles from the test S3 bucket and the production build loading tiles from the prod S3 bucket.', name: 'VUE_BUILD_MODE')
gitParameter(name: 'BRANCH_TAG',
type: 'PT_BRANCH_TAG',
selectedValue: 'DEFAULT',
defaultValue: 'origin/main')
}

stages {
stage('clean workspace'){
steps{
cleanWs()
}
}
stage('checkout'){
steps{
checkout([$class: 'GitSCM',
branches: [[name: "${params.BRANCH_TAG}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
gitTool: 'Default',
submoduleCfg: [],
userRemoteConfigs: [[url: 'https://github.com/usgs-vizlab/gw-conditions.git']]
])
}
}

stage('build') {
steps {

sh """
docker build . --tag="gw-conditions-docker" --build-arg BUILDTARGET=${params.BUILD_DEST} --build-arg VUE_BUILD_MODE=${params.VUE_BUILD_MODE}
docker run gw-conditions-docker
pathtemplate=":tmp/gw-conditions/dist"
dockerinstanceid=\$( docker ps -l -q )
docker cp "\${dockerinstanceid}\${pathtemplate}" "$WORKSPACE"
docker rm "\${dockerinstanceid}"
"""

}
}

stage('send to S3') {
steps {
script {
if ("${params.BUILD_DEST}" == "prod") {
targetDomain = "s3://water-visualizations-prod-website/visualizations/gw-conditions"
}
else if ("${params.BUILD_DEST}" == "beta") {
targetDomain = "s3://water-visualizations-beta-website/visualizations/gw-conditions"
}
else {
targetDomain = "s3://water-visualizations-test-website/visualizations/gw-conditions"
}
}
sh """
aws s3 rm "${targetDomain}" --recursive
aws s3 cp "$WORKSPACE/dist" "${targetDomain}" --recursive
"""
}
}
}

post {
success {
mail to: '[email protected], [email protected]',
subject: "Success: ${currentBuild.fullDisplayName}",
body: "Pipeline finished successfully ${env.BUILD_URL}"
}
unstable {
mail to: '[email protected], [email protected]',
subject: "Unstable: ${currentBuild.fullDisplayName}",
body: "Pipeline is unstable ${env.BUILD_URL}"
}
failure {
mail to: '[email protected], [email protected]',
subject: "Failure: ${currentBuild.fullDisplayName}",
body: "Pipeline failed ${env.BUILD_URL}"
}
changed {
mail to: '[email protected], [email protected], [email protected]',
subject: "Changes: ${currentBuild.fullDisplayName}",
body: "Pipeline detected changes ${env.BUILD_URL}"
}
}
}
Loading