Merge branch 'release/1.0.0'
This commit is contained in:
60
.github/workflows/dev.yml
vendored
Normal file
60
.github/workflows/dev.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
name: Dev
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ develop ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Publish to Registry
|
||||||
|
uses: elgohr/Publish-Docker-Github-Action@master
|
||||||
|
with:
|
||||||
|
name: standardnotes/web
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
tags: "latest,${{ github.sha }}"
|
||||||
|
|
||||||
|
- name: Configure AWS credentials
|
||||||
|
uses: aws-actions/configure-aws-credentials@v1
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
aws-region: us-east-1
|
||||||
|
|
||||||
|
- name: Download task definition
|
||||||
|
run: |
|
||||||
|
aws ecs describe-task-definition --task-definition app-dev --query taskDefinition > task-definition.json
|
||||||
|
|
||||||
|
- name: Fill in the new image ID in the Amazon ECS task definition
|
||||||
|
id: task-def
|
||||||
|
uses: aws-actions/amazon-ecs-render-task-definition@v1
|
||||||
|
with:
|
||||||
|
task-definition: task-definition.json
|
||||||
|
container-name: app-dev
|
||||||
|
image: "standardnotes/web:${{ github.sha }}"
|
||||||
|
|
||||||
|
- name: Deploy Amazon ECS task definition
|
||||||
|
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
|
||||||
|
with:
|
||||||
|
task-definition: ${{ steps.task-def.outputs.task-definition }}
|
||||||
|
service: app-dev
|
||||||
|
cluster: dev
|
||||||
|
wait-for-service-stability: true
|
||||||
|
|
||||||
|
notify_slack:
|
||||||
|
needs: deploy
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Notify slack
|
||||||
|
uses: pullreminders/slack-action@master
|
||||||
|
env:
|
||||||
|
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
|
||||||
|
with:
|
||||||
|
args: '{ \"channel\": \"${{ secrets.SLACK_NOTIFICATION_CHANNEL }}\", \"blocks\": [{\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"Successfully deployed <https://app-dev.standardnotes.org|[DEV] Web App>\"}}, {\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"Changes: <https://github.com/standardnotes/web/commit/${{ github.sha }}|${{ github.sha }}>\"}, \"accessory\": {\"type\": \"image\", \"image_url\": \"https://website-dev.standardnotes.org/assets/icon.png\", \"alt_text\": \"Standard Notes\"}}, { \"type\": \"section\", \"fields\": [{\"type\": \"mrkdwn\", \"text\": \"<https://github.com/standardnotes/web/actions/runs/${{ github.run_id }}|Build details>\"}]}]}'
|
||||||
60
.github/workflows/prod.yml
vendored
Normal file
60
.github/workflows/prod.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
name: Prod
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Publish to Registry
|
||||||
|
uses: elgohr/Publish-Docker-Github-Action@master
|
||||||
|
with:
|
||||||
|
name: standardnotes/web
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
tags: "stable,${{ github.sha }}"
|
||||||
|
|
||||||
|
- name: Configure AWS credentials
|
||||||
|
uses: aws-actions/configure-aws-credentials@v1
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
aws-region: us-east-1
|
||||||
|
|
||||||
|
- name: Download task definition
|
||||||
|
run: |
|
||||||
|
aws ecs describe-task-definition --task-definition app-prod --query taskDefinition > task-definition.json
|
||||||
|
|
||||||
|
- name: Fill in the new image ID in the Amazon ECS task definition
|
||||||
|
id: task-def
|
||||||
|
uses: aws-actions/amazon-ecs-render-task-definition@v1
|
||||||
|
with:
|
||||||
|
task-definition: task-definition.json
|
||||||
|
container-name: app-prod
|
||||||
|
image: "standardnotes/web:${{ github.sha }}"
|
||||||
|
|
||||||
|
- name: Deploy Amazon ECS task definition
|
||||||
|
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
|
||||||
|
with:
|
||||||
|
task-definition: ${{ steps.task-def.outputs.task-definition }}
|
||||||
|
service: app-prod
|
||||||
|
cluster: prod
|
||||||
|
wait-for-service-stability: true
|
||||||
|
|
||||||
|
notify_slack:
|
||||||
|
needs: deploy
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Notify slack
|
||||||
|
uses: pullreminders/slack-action@master
|
||||||
|
env:
|
||||||
|
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
|
||||||
|
with:
|
||||||
|
args: '{ \"channel\": \"${{ secrets.SLACK_NOTIFICATION_CHANNEL }}\", \"blocks\": [{\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"Successfully deployed <https://app-prod.standardnotes.org|[PROD] Web App>\"}}, {\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"Changes: <https://github.com/standardnotes/web/commit/${{ github.sha }}|${{ github.sha }}>\"}, \"accessory\": {\"type\": \"image\", \"image_url\": \"https://website-dev.standardnotes.org/assets/icon.png\", \"alt_text\": \"Standard Notes\"}}, { \"type\": \"section\", \"fields\": [{\"type\": \"mrkdwn\", \"text\": \"<https://github.com/standardnotes/web/actions/runs/${{ github.run_id }}|Build details>\"}]}]}'
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
# Set up Nginx to terminate SSL with LetsEncrypt and proxy_pass to http://localhost:3000/
|
# Set up Nginx to terminate SSL with LetsEncrypt and proxy_pass to http://localhost:3000/
|
||||||
###
|
###
|
||||||
|
|
||||||
FROM ruby:alpine
|
FROM ruby:2.7.1-alpine
|
||||||
|
|
||||||
RUN apk add --update --no-cache \
|
RUN apk add --update --no-cache \
|
||||||
alpine-sdk \
|
alpine-sdk \
|
||||||
@@ -34,15 +34,8 @@ COPY . /app/
|
|||||||
# Leave RAILS_SERVE_STATIC_FILES commented if Nginx/Apache will serve static files instead of rails.
|
# Leave RAILS_SERVE_STATIC_FILES commented if Nginx/Apache will serve static files instead of rails.
|
||||||
###
|
###
|
||||||
|
|
||||||
RUN bundle install
|
|
||||||
|
|
||||||
RUN npm install
|
|
||||||
|
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Uncomment the line below for production:
|
|
||||||
# RUN bundle exec rake assets:precompile
|
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
ENTRYPOINT [ "./docker/entrypoint" ]
|
ENTRYPOINT [ "./docker/entrypoint" ]
|
||||||
|
|||||||
@@ -96,13 +96,13 @@ GEM
|
|||||||
net-ssh (>= 2.6.5, < 6.0.0)
|
net-ssh (>= 2.6.5, < 6.0.0)
|
||||||
net-ssh (5.2.0)
|
net-ssh (5.2.0)
|
||||||
nio4r (2.5.2)
|
nio4r (2.5.2)
|
||||||
nokogiri (1.10.7)
|
nokogiri (1.10.8)
|
||||||
mini_portile2 (~> 2.4.0)
|
mini_portile2 (~> 2.4.0)
|
||||||
nokogiri (1.10.7-x64-mingw32)
|
nokogiri (1.10.8-x64-mingw32)
|
||||||
mini_portile2 (~> 2.4.0)
|
mini_portile2 (~> 2.4.0)
|
||||||
non-stupid-digest-assets (1.0.9)
|
non-stupid-digest-assets (1.0.9)
|
||||||
sprockets (>= 2.0)
|
sprockets (>= 2.0)
|
||||||
puma (4.3.1)
|
puma (4.3.5)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
rack (2.1.2)
|
rack (2.1.2)
|
||||||
rack-cors (1.1.1)
|
rack-cors (1.1.1)
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
*/
|
*/
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "Ionicons";
|
font-family: "Ionicons";
|
||||||
src: url("../fonts/ionicons.eot?v=2.0.0");
|
src: url("/assets/fonts/ionicons.eot?v=2.0.0");
|
||||||
src: url("../fonts/ionicons.eot?v=2.0.1#iefix") format("embedded-opentype"), url("../fonts/ionicons.ttf?v=2.0.1") format("truetype"), url("../fonts/ionicons.woff?v=2.0.1") format("woff"), url("../fonts/ionicons.svg?v=2.0.1#Ionicons") format("svg");
|
src: url("/assets/fonts/ionicons.eot?v=2.0.1#iefix") format("embedded-opentype"), url("/assets/fonts/ionicons.ttf?v=2.0.1") format("truetype"), url("/assets/fonts/ionicons.woff?v=2.0.1") format("woff"), url("/assets/fonts/ionicons.svg?v=2.0.1#Ionicons") format("svg");
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ iframe(
|
|||||||
ng-attr-id='component-iframe-{{ctrl.component.uuid}}',
|
ng-attr-id='component-iframe-{{ctrl.component.uuid}}',
|
||||||
ng-if='ctrl.component && ctrl.componentValid',
|
ng-if='ctrl.component && ctrl.componentValid',
|
||||||
ng-src='{{ctrl.getUrl() | trusted}}',
|
ng-src='{{ctrl.getUrl() | trusted}}',
|
||||||
sandbox='allow-scripts allow-top-navigation-by-user-activation allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-modals allow-forms'
|
sandbox='allow-scripts allow-top-navigation-by-user-activation allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-modals allow-forms allow-downloads'
|
||||||
)
|
)
|
||||||
| Loading
|
| Loading
|
||||||
.loading-overlay(ng-if='ctrl.loading')
|
.loading-overlay(ng-if='ctrl.loading')
|
||||||
|
|||||||
5
app/controllers/health_check_controller.rb
Normal file
5
app/controllers/health_check_controller.rb
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
class HealthCheckController < ApplicationController
|
||||||
|
def index
|
||||||
|
render :plain => "OK"
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -43,7 +43,7 @@ module StandardNotes
|
|||||||
base_uri: %w('self'),
|
base_uri: %w('self'),
|
||||||
block_all_mixed_content: false, # see http://www.w3.org/TR/mixed-content/
|
block_all_mixed_content: false, # see http://www.w3.org/TR/mixed-content/
|
||||||
child_src: ["*", "blob:"],
|
child_src: ["*", "blob:"],
|
||||||
frame_src: ["*", "blob:"],
|
frame_src: ["*", "blob:", "data:"],
|
||||||
connect_src: ["*"],
|
connect_src: ["*"],
|
||||||
font_src: %w(* 'self'),
|
font_src: %w(* 'self'),
|
||||||
form_action: %w('self'),
|
form_action: %w('self'),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ Rails.application.configure do
|
|||||||
# Settings specified here will take precedence over those in config/application.rb.
|
# Settings specified here will take precedence over those in config/application.rb.
|
||||||
|
|
||||||
config.force_ssl = true
|
config.force_ssl = true
|
||||||
|
config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }
|
||||||
|
|
||||||
# Code is not reloaded between requests.
|
# Code is not reloaded between requests.
|
||||||
config.cache_classes = true
|
config.cache_classes = true
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Rails.application.config.assets.version = '1.0'
|
|||||||
Rails.application.config.assets.paths << Rails.root.join('vendor', 'assets')
|
Rails.application.config.assets.paths << Rails.root.join('vendor', 'assets')
|
||||||
Rails.application.config.assets.paths << Rails.root.join('dist')
|
Rails.application.config.assets.paths << Rails.root.join('dist')
|
||||||
|
|
||||||
Rails.application.config.assets.precompile << ["*.svg", "*.eot", "*.woff", "*.ttf"]
|
Rails.application.config.assets.precompile += %w( fonts/ionicons.eot fonts/ionicons.svg fonts/ionicons.ttf fonts/ionicons.woff )
|
||||||
|
|
||||||
# Precompile additional assets.
|
# Precompile additional assets.
|
||||||
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
Rails.application.routes.draw do
|
Rails.application.routes.draw do
|
||||||
|
get "/healthcheck" => "health_check#index"
|
||||||
|
|
||||||
root 'application#app'
|
root 'application#app'
|
||||||
end
|
end
|
||||||
|
|||||||
6
package-lock.json
generated
6
package-lock.json
generated
@@ -12123,9 +12123,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"websocket-extensions": {
|
"websocket-extensions": {
|
||||||
"version": "0.1.3",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
|
||||||
"integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
|
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"which": {
|
"which": {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "webpack-dev-server --progress",
|
"start": "webpack-dev-server --progress",
|
||||||
"bundle": "webpack --mode production",
|
"bundle": "webpack --mode production",
|
||||||
"build": "bundle install && npm install && npm run bundle",
|
"build": "bundle install && npm ci && bundle exec rails assets:precompile && npm run bundle",
|
||||||
"submodules": "git submodule update --init --force --remote",
|
"submodules": "git submodule update --init --force --remote",
|
||||||
"test": "karma start karma.conf.js --single-run",
|
"test": "karma start karma.conf.js --single-run",
|
||||||
"lint": "eslint --fix app/assets/javascripts/**/*.js"
|
"lint": "eslint --fix app/assets/javascripts/**/*.js"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Reference in New Issue
Block a user