Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
69 changes: 31 additions & 38 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -155,58 +155,51 @@ jobs:
with:
file: coverage/lcov.info

build-deploy-frontend:
build-nextjs-container:
Copy link
Contributor

Choose a reason for hiding this comment

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

I'd be happy to just remove this step—we have yarn workspace main build above. (Which, annoyingly, we do need to run separately. It has to run before typecheck. vercel/next.js#53959 (comment))

If you want to keep it, I would remove the heroku vars.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The intention is to catch issues building the container before that happens on the release branches, but:

  • As you say, we end up doing 2 builds on push (albeit in parallel).
  • It's not the exact same as release branches as there we build using Heroku's CLI heroku container:push (they don't have a build only / dry run command).

It would be good to have some check on the docker build before we get to release-candidate. Can we rethink once this is released? Good call with Heroku vars - removed.

needs: javascript-tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4

- name: Heroku login
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: heroku container:login

- name: Build the Docker image
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
EMBEDLY_KEY: ${{ secrets.EMBEDLY_KEY_RC }}
ORIGIN: https://next.rc.learn.mit.edu
MITOL_API_BASE_URL: https://api.rc.learn.mit.edu
SITE_NAME: MIT Learn
SUPPORT_EMAIL: mitlearn-support@mit.edu
EMBEDLY_KEY: ${{ secrets.EMBEDLY_KEY_RC }}
MITOL_AXIOS_WITH_CREDENTIALS: true
CSRF_COOKIE_NAME: learn-rc-csrftoken
NEXT_PUBLIC_SENTRY_DSN: ${{ secrets.SENTRY_DSN_RC }}
NEXT_PUBLIC_SENTRY_ENV: rc
NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE: 0.0
NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE: 0.0
NEXT_PUBLIC_VERSION: ${{ github.sha }}
NEXT_PUBLIC_POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY_RC }}
CSRF_COOKIE_NAME: ${{ secrets.CSRF_COOKIE_NAME_RC }}
POSTHOG_API_HOST: https://app.posthog.com
POSTHOG_PROJECT_ID: ${{ secrets.POSTHOG_PROJECT_ID_RC }}
POSTHOG_API_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY_RC }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN_RC }}
SENTRY_ENV: ${{ secrets.MITOL_ENVIRONMENT_RC }}
SENTRY_PROFILES_SAMPLE_RATE: ${{ secrets.SENTRY_PROFILES_SAMPLE_RATE_RC }}
SENTRY_TRACES_SAMPLE_RATE: ${{ secrets.SENTRY_TRACES_SAMPLE_RATE_RC }}
APPZI_URL: ${{ secrets.APPZI_URL_RC }}
VERSION: ${{ github.sha }}
run: |
heroku container:push web \
--app mitopen-rc-nextjs \
--recursive \
--arg NEXT_PUBLIC_ORIGIN=$ORIGIN,\
NEXT_PUBLIC_MITOL_API_BASE_URL=$MITOL_API_BASE_URL,\
NEXT_PUBLIC_SITE_NAME="$SITE_NAME",\
NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=$SUPPORT_EMAIL,\
NEXT_PUBLIC_EMBEDLY_KEY=$EMBEDLY_KEY,\
NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=$MITOL_AXIOS_WITH_CREDENTIALS,\
NEXT_PUBLIC_CSRF_COOKIE_NAME=$CSRF_COOKIE_NAME,\
NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION,\
NEXT_PUBLIC_SENTRY_DSN=$NEXT_PUBLIC_SENTRY_DSN,\
NEXT_PUBLIC_SENTRY_ENV=$NEXT_PUBLIC_SENTRY_ENV,\
NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE=$NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE,\
NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=$NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE,\
NEXT_PUBLIC_POSTHOG_API_KEY=$NEXT_PUBLIC_POSTHOG_API_KEY \
--context-path .

- name: Release on Heroku
if: github.ref == 'refs/heads/nextjs'
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: heroku container:release --app mitopen-rc-nextjs web
docker build \
-f frontends/main/Dockerfile.web \
--build-arg NEXT_PUBLIC_ORIGIN=$ORIGIN \
--build-arg NEXT_PUBLIC_MITOL_API_BASE_URL=$MITOL_API_BASE_URL \
--build-arg NEXT_PUBLIC_SITE_NAME="$SITE_NAME" \
--build-arg NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=$SUPPORT_EMAIL \
--build-arg NEXT_PUBLIC_EMBEDLY_KEY=$EMBEDLY_KEY \
--build-arg NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=$MITOL_AXIOS_WITH_CREDENTIALS \
--build-arg NEXT_PUBLIC_CSRF_COOKIE_NAME=$CSRF_COOKIE_NAME \
--build-arg NEXT_PUBLIC_POSTHOG_API_HOST=$POSTHOG_API_HOST \
--build-arg NEXT_PUBLIC_POSTHOG_PROJECT_ID=$POSTHOG_PROJECT_ID \
--build-arg NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY \
--build-arg NEXT_PUBLIC_SENTRY_DSN=$SENTRY_DSN \
--build-arg NEXT_PUBLIC_SENTRY_ENV=$SENTRY_ENV \
--build-arg NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE=$SENTRY_PROFILES_SAMPLE_RATE \
Copy link
Contributor

Choose a reason for hiding this comment

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

noting that this appears to currently be hardcoded to 0 in the env section

--build-arg NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=$SENTRY_TRACES_SAMPLE_RATE \
--build-arg NEXT_PUBLIC_APPZI_URL=$APPZI_URL \
--build-arg NEXT_PUBLIC_VERSION=$VERSION \
-t mitodl/mit-learn-frontend:$VERSION .

build-storybook:
runs-on: ubuntu-latest
Expand Down
96 changes: 55 additions & 41 deletions .github/workflows/production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,64 +19,78 @@ jobs:
with:
ref: release

- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4
with:
node-version: "^20"
cache: yarn
cache-dependency-path: yarn.lock
- name: Set VERSION
run: echo "VERSION=$(./scripts/get_version.sh)" >> $GITHUB_ENV

- name: Setup environment
run: sudo apt-get install libelf1
- name: Write commit SHA to file
run: echo $GITHUB_SHA > frontends/main/public/hash.txt

- name: Install frontend dependencies
run: yarn install --immutable
- name: Heroku login
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: heroku container:login

- name: Set VERSION
run: echo "VERSION=$(./scripts/get_version.sh)" >> $GITHUB_ENV
- name: Release Backend on Heroku
uses: akhileshns/heroku-deploy@581dd286c962b6972d427fcf8980f60755c15520
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: mitopen-production
heroku_email: ${{ secrets.HEROKU_EMAIL }}
branch: release

- name: Build frontend
run: NODE_ENV=production yarn build
- name: Build and push the Docker image
env:
HEROKU_APP_NAME: mitopen-production-nextjs
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
ORIGIN: https://learn.mit.edu
MITOL_API_BASE_URL: https://api.learn.mit.edu
SITE_NAME: MIT Learn
SUPPORT_EMAIL: mitlearn-support@mit.edu
EMBEDLY_KEY: ${{ secrets.EMBEDLY_KEY_PROD }}
POSTHOG_ENABLED: true
MITOL_AXIOS_WITH_CREDENTIALS: true
CSRF_COOKIE_NAME: ${{ secrets.CSRF_COOKIE_NAME_PROD }}
POSTHOG_API_HOST: https://app.posthog.com
POSTHOG_TIMEOUT_MS: 1000
POSTHOG_PROJECT_ID: ${{ secrets.POSTHOG_PROJECT_ID_PROD }}
POSTHOG_PROJECT_API_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY_PROD }}
POSTHOG_API_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY_PROD }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN_PROD }}
SENTRY_ENV: ${{ secrets.MITOL_ENVIRONMENT_PROD }}
SENTRY_PROFILES_SAMPLE_RATE: ${{ secrets.SENTRY_PROFILES_SAMPLE_RATE_PROD }}
SENTRY_TRACES_SAMPLE_RATE: ${{ secrets.SENTRY_TRACES_SAMPLE_RATE_PROD }}
APPZI_URL: ${{ secrets.APPZI_URL_PROD }}
CSRF_COOKIE_NAME: ${{ secrets.CSRF_COOKIE_NAME_PROD }}
MITOL_AXIOS_WITH_CREDENTIALS: true
MITOL_API_BASE_URL: https://api.learn.mit.edu
MITOL_SUPPORT_EMAIL: mitlearn-support@mit.edu

- uses: akhileshns/heroku-deploy@581dd286c962b6972d427fcf8980f60755c15520
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: "mitopen-production"
heroku_email: ${{ secrets.HEROKU_EMAIL }}
branch: release
VERSION: ${{ github.sha }}
run: |
heroku container:push web \
--app $HEROKU_APP_NAME \
--recursive \
--arg NEXT_PUBLIC_ORIGIN=$ORIGIN,\
NEXT_PUBLIC_MITOL_API_BASE_URL=$MITOL_API_BASE_URL,\
NEXT_PUBLIC_SITE_NAME="$SITE_NAME",\
NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=$SUPPORT_EMAIL,\
NEXT_PUBLIC_EMBEDLY_KEY=$EMBEDLY_KEY,\
NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=$MITOL_AXIOS_WITH_CREDENTIALS,\
NEXT_PUBLIC_CSRF_COOKIE_NAME=$CSRF_COOKIE_NAME,\
NEXT_PUBLIC_POSTHOG_API_HOST=$POSTHOG_API_HOST,\
NEXT_PUBLIC_POSTHOG_PROJECT_ID=$POSTHOG_PROJECT_ID,\
NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY,\
NEXT_PUBLIC_SENTRY_DSN=$SENTRY_DSN,\
NEXT_PUBLIC_SENTRY_ENV=$SENTRY_ENV,\
NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE=$SENTRY_PROFILES_SAMPLE_RATE,\
NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=$SENTRY_TRACES_SAMPLE_RATE,\
NEXT_PUBLIC_APPZI_URL=$APPZI_URL,\
NEXT_PUBLIC_VERSION=$VERSION \
--context-path .

- name: Write commit SHA to file
run: echo $GITHUB_SHA > frontends/mit-learn/build/static/hash.txt

- name: Upload frontend build to s3
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks
- name: Release Frontend on Heroku
env:
AWS_S3_BUCKET: ol-mitlearn-app-storage-production
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID_PROD }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }}
SOURCE_DIR: "frontends/mit-learn/build" # optional: defaults to entire repository
DEST_DIR: "frontend" # This dir will get cluttered but it is okay for now
HEROKU_APP_NAME: mitopen-production-nextjs
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: heroku container:release --app $HEROKU_APP_NAME web

- name: Purge Fastly cache
uses: jcoene/fastly-purge-action@master
with:
api_key: "${{ secrets.FASTLY_API_KEY_PROD }}"
service_id: "${{ secrets.FASTLY_SERVICE_ID_PROD }}"
api_key: "${{ secrets.FASTLY_API_KEY_PROD_NEXTJS }}"
service_id: "${{ secrets.FASTLY_SERVICE_ID_PROD_NEXTJS }}"

# runs ONLY on a failure of the CI workflow
on-failure:
Expand Down
96 changes: 55 additions & 41 deletions .github/workflows/release-candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,64 +19,78 @@ jobs:
with:
ref: release-candidate

- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4
with:
node-version: "^20"
cache: yarn
cache-dependency-path: yarn.lock
- name: Set VERSION
run: echo "VERSION=$(./scripts/get_version.sh)" >> $GITHUB_ENV

- name: Setup environment
run: sudo apt-get install libelf1
- name: Write commit SHA to file
run: echo $GITHUB_SHA > frontends/main/public/hash.txt

- name: Install frontend dependencies
run: yarn install --immutable
- name: Heroku login
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: heroku container:login

- name: Set VERSION
run: echo "VERSION=$(./scripts/get_version.sh)" >> $GITHUB_ENV
- name: Release Backend on Heroku
uses: akhileshns/heroku-deploy@581dd286c962b6972d427fcf8980f60755c15520
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: mitopen-rc
heroku_email: ${{ secrets.HEROKU_EMAIL }}
branch: release-candidate

- name: Build frontend
run: NODE_ENV=production yarn build
- name: Build and push the Docker image
env:
HEROKU_APP_NAME: mitopen-rc-nextjs
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
ORIGIN: https://next.rc.learn.mit.edu
MITOL_API_BASE_URL: https://api.rc.learn.mit.edu
SITE_NAME: MIT Learn
SUPPORT_EMAIL: mitlearn-support@mit.edu
EMBEDLY_KEY: ${{ secrets.EMBEDLY_KEY_RC }}
POSTHOG_ENABLED: true
MITOL_AXIOS_WITH_CREDENTIALS: true
CSRF_COOKIE_NAME: ${{ secrets.CSRF_COOKIE_NAME_RC }}
POSTHOG_API_HOST: https://app.posthog.com
POSTHOG_TIMEOUT_MS: 1000
POSTHOG_PROJECT_ID: ${{ secrets.POSTHOG_PROJECT_ID_RC }}
POSTHOG_PROJECT_API_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY_RC }}
POSTHOG_API_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY_RC }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN_RC }}
SENTRY_ENV: ${{ secrets.MITOL_ENVIRONMENT_RC }}
CSRF_COOKIE_NAME: ${{ secrets.CSRF_COOKIE_NAME_RC }}
SENTRY_PROFILES_SAMPLE_RATE: ${{ secrets.SENTRY_PROFILES_SAMPLE_RATE_RC }}
SENTRY_TRACES_SAMPLE_RATE: ${{ secrets.SENTRY_TRACES_SAMPLE_RATE_RC }}
APPZI_URL: ${{ secrets.APPZI_URL_RC }}
MITOL_AXIOS_WITH_CREDENTIALS: true
MITOL_API_BASE_URL: https://api.rc.learn.mit.edu
MITOL_SUPPORT_EMAIL: mitlearn-support@mit.edu

- uses: akhileshns/heroku-deploy@581dd286c962b6972d427fcf8980f60755c15520
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: "mitopen-rc"
heroku_email: ${{ secrets.HEROKU_EMAIL }}
branch: release-candidate
VERSION: ${{ github.sha }}
run: |
heroku container:push web \
--app $HEROKU_APP_NAME \
--recursive \
--arg NEXT_PUBLIC_ORIGIN=$ORIGIN,\
NEXT_PUBLIC_MITOL_API_BASE_URL=$MITOL_API_BASE_URL,\
NEXT_PUBLIC_SITE_NAME="$SITE_NAME",\
NEXT_PUBLIC_MITOL_SUPPORT_EMAIL=$SUPPORT_EMAIL,\
NEXT_PUBLIC_EMBEDLY_KEY=$EMBEDLY_KEY,\
NEXT_PUBLIC_MITOL_AXIOS_WITH_CREDENTIALS=$MITOL_AXIOS_WITH_CREDENTIALS,\
NEXT_PUBLIC_CSRF_COOKIE_NAME=$CSRF_COOKIE_NAME,\
NEXT_PUBLIC_POSTHOG_API_HOST=$POSTHOG_API_HOST,\
NEXT_PUBLIC_POSTHOG_PROJECT_ID=$POSTHOG_PROJECT_ID,\
NEXT_PUBLIC_POSTHOG_API_KEY=$POSTHOG_API_KEY,\
NEXT_PUBLIC_SENTRY_DSN=$SENTRY_DSN,\
NEXT_PUBLIC_SENTRY_ENV=$SENTRY_ENV,\
NEXT_PUBLIC_SENTRY_PROFILES_SAMPLE_RATE=$SENTRY_PROFILES_SAMPLE_RATE,\
NEXT_PUBLIC_SENTRY_TRACES_SAMPLE_RATE=$SENTRY_TRACES_SAMPLE_RATE,\
NEXT_PUBLIC_APPZI_URL=$APPZI_URL,\
NEXT_PUBLIC_VERSION=$VERSION \
--context-path .

- name: Write commit SHA to file
run: echo $GITHUB_SHA > frontends/mit-learn/build/static/hash.txt

- name: Upload frontend build to s3
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks
- name: Release Frontend on Heroku
env:
AWS_S3_BUCKET: ol-mitlearn-app-storage-rc
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID_RC }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY_RC }}
SOURCE_DIR: "frontends/mit-learn/build" # optional: defaults to entire repository
DEST_DIR: "frontend" # This dir will get cluttered but it is okay for now
HEROKU_APP_NAME: mitopen-rc-nextjs
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: heroku container:release --app $HEROKU_APP_NAME web

- name: Purge Fastly cache
uses: jcoene/fastly-purge-action@master
with:
api_key: "${{ secrets.FASTLY_API_KEY_RC }}"
service_id: "${{ secrets.FASTLY_SERVICE_ID_RC }}"
api_key: "${{ secrets.FASTLY_API_KEY_RC_NEXTJS }}"
service_id: "${{ secrets.FASTLY_SERVICE_ID_RC_NEXTJS }}"

# runs ONLY on a failure of the CI workflow
on-failure:
Expand Down
Loading
Loading