diff --git a/.github/workflows/codeforafrica-deploy-dev-app.yml b/.github/workflows/codeforafrica-deploy-dev-app.yml new file mode 100644 index 000000000..ff34db80d --- /dev/null +++ b/.github/workflows/codeforafrica-deploy-dev-app.yml @@ -0,0 +1,84 @@ +name: Code for Africa | Deploy | DEV + +on: + push: + branches: [develop] + paths: + - "apps/codeforafrica/**" + - "Dockerfile.codeforafrica" + - ".github/**" + +concurrency: + group: "${{ github.workflow }} @ ${{ github.ref }}" + cancel-in-progress: true + +env: + DOKKU_REMOTE_BRANCH: "master" + DOKKU_REMOTE_URL: "ssh://azureuser@ui-1.dev.codeforafrica.org" + IMAGE_NAME: "codeforafrica/codeforafrica-ui" + NEXT_PUBLIC_APP_URL: "https://codeforafrica.dev.codeforafrica.org" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + APP_NAME: codeforafrica-ui + +jobs: + deploy: + runs-on: ${{ matrix.os }} + strategy: + matrix: + node-version: [18] + os: [ubuntu-latest] + steps: + - name: Cloning repo + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + key: ${{ runner.os }}-buildx-${{ github.sha }} + path: /tmp/.buildx-cache + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + username: ${{ secrets.DOCKER_HUB_USERNAME }} + + - name: Build Docker image + uses: docker/build-push-action@v3 + with: + build-args: | + MONGODB_URL=${{ secrets.CODEFORAFRICA_MONGO_URL }}/${{ env.APP_NAME }} + NEXT_PUBLIC_APP_URL=${{ env.NEXT_PUBLIC_APP_URL }} + PAYLOAD_SECRET=${{ secrets.CODEFORAFRICA_PAYLOAD_SECRET_KEY }} + GHOST_URL=${{ secrets.GHOST_URL }} + GHOST_API_KEY=${{ secrets.GHOST_API_KEY }} + NEXT_PUBLIC_APP_LOGO_URL=${{ secrets.NEXT_PUBLIC_APP_CFA_LOGO_URL }} + NEXT_PUBLIC_APP_NAME=${{ secrets.NEXT_PUBLIC_APP_CFA_NAME }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new + context: . + file: ./Dockerfile.codeforafrica + push: true + tags: "${{ env.IMAGE_NAME }}:${{ github.sha }}" + + # Temp fix + # https://github.com/docker/build-push-action/issues/252 + # https://github.com/moby/buildkit/issues/1896 + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cach + + - name: Push to Dokku + uses: dokku/github-action@v1.4.0 + with: + git_remote_url: ${{ env.DOKKU_REMOTE_URL }}/${{ env.APP_NAME }} + ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }} + deploy_docker_image: ${{ env.IMAGE_NAME }}:${{ github.sha }} diff --git a/.github/workflows/codeforafrica-deploy-review-app.yml b/.github/workflows/codeforafrica-deploy-review-app.yml new file mode 100644 index 000000000..0d2f232e6 --- /dev/null +++ b/.github/workflows/codeforafrica-deploy-review-app.yml @@ -0,0 +1,103 @@ +name: Code for Africa | Deploy | REVIEW APP + +on: + pull_request: + paths: + - "apps/codeforafrica/**" + - "Dockerfile.codeforafrica" + - ".github/**" +concurrency: + group: "${{ github.workflow }} @ ${{ github.ref }}" + cancel-in-progress: false + +env: + DOKKU_REMOTE_BRANCH: "master" + DOKKU_REMOTE_URL: "ssh://azureuser@ui-1.dev.codeforafrica.org" + IMAGE_NAME: "codeforafrica/codeforafrica-ui" + ORIGINAL_APP_NAME: "codeforafrica-ui" + NEXT_PUBLIC_APP_URL: "https://codeforafrica-ui-pr-${{github.event.pull_request.number}}.dev.codeforafrica.org" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + APP_NAME: codeforafrica-ui-pr-${{ github.event.pull_request.number }} + +jobs: + review_app: + runs-on: ${{ matrix.os }} + strategy: + matrix: + node-version: [18] + os: [ubuntu-latest] + if: github.event_name == 'pull_request' && github.event.action != 'closed' + steps: + - name: Cloning repo + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + key: ${{ runner.os }}-buildx-${{ github.sha }} + path: /tmp/.buildx-cache + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + username: ${{ secrets.DOCKER_HUB_USERNAME }} + + - name: Build Docker image + uses: docker/build-push-action@v3 + with: + build-args: | + MONGODB_URL=${{ secrets.CODEFORAFRICA_MONGO_URL }}/${{ env.APP_NAME }} + NEXT_PUBLIC_APP_URL=${{ env.NEXT_PUBLIC_APP_URL }} + PAYLOAD_SECRET=${{ secrets.CODEFORAFRICA_PAYLOAD_SECRET_KEY }} + NEXT_PUBLIC_APP_LOGO_URL=${{ secrets.NEXT_PUBLIC_APP_CFA_LOGO_URL }} + NEXT_PUBLIC_APP_NAME=${{ secrets.NEXT_PUBLIC_APP_CFA_NAME }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new + context: . + file: ./Dockerfile.codeforafrica + push: true + tags: "${{ env.IMAGE_NAME }}:${{ github.sha }}" + + - name: Push to dokku + uses: dokku/github-action@master + with: + # create a review app + command: review-apps:create + git_remote_url: ${{ env.DOKKU_REMOTE_URL }}/codeforafrica-ui + # specify a name for the review app + review_app_name: ${{ env.APP_NAME }} + ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }} + deploy_docker_image: ${{ env.IMAGE_NAME }}:${{ github.sha }} + + - name: Update Preview URL + run: (gh pr comment ${{ env.issue-number }} --edit-last --body='${{ env.body }}' || gh pr comment ${{ env.issue-number }} --body='${{ env.body }}') + env: + issue-number: ${{ github.event.pull_request.number }} + body: | + Latest updated Preview URL + | Name | Review | + |-------|--------| + | ${{ env.APP_NAME }} | [Visit](https://${{ env.APP_NAME }}.dev.codeforafrica.org) | + + destroy_review_app: + runs-on: ubuntu-latest + # only run when a pull request is closed + if: github.event.action == 'closed' + steps: + - name: Destroy the review app + uses: dokku/github-action@master + with: + # destroy a review app + command: review-apps:destroy + git_remote_url: ${{ env.DOKKU_REMOTE_URL }}/${{ env.APP_NAME }} + # specify a name for the review app + review_app_name: ${{ env.APP_NAME }} + ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }} diff --git a/Dockerfile.codeforafrica b/Dockerfile.codeforafrica new file mode 100644 index 000000000..9ae89ad8f --- /dev/null +++ b/Dockerfile.codeforafrica @@ -0,0 +1,71 @@ +FROM node:18-alpine as node-alpine + +RUN apk update \ + && apk upgrade + + +FROM node-alpine as base + +RUN apk add --no-cache libc6-compat + +ARG PNPM_VERSION=8.5.0 + +RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate + +WORKDIR /workspace + +COPY pnpm-lock.yaml . + +RUN pnpm fetch + +FROM base as builder + + +WORKDIR /workspace + +COPY *.yaml *.json ./ +COPY packages ./packages +COPY apps/codeforafrica ./apps/codeforafrica + +# Use virtual store: https://pnpm.io/cli/fetch#usage-scenario +RUN pnpm install --recursive --offline --frozen-lockfile + +ARG PORT=3000 \ + MONGODB_URL \ + PAYLOAD_SECRET \ + NEXT_PUBLIC_APP_URL=http://localhost:3000 + +RUN pnpm build-next --filter=codeforafrica + +ARG PAYLOAD_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} + +RUN pnpm build-payload --filter=codeforafrica + +FROM builder as runner + +RUN rm -rf /var/cache/apk/* + +ARG NEXT_PUBLIC_APP_NAME \ + NEXT_PUBLIC_APP_URL \ + NEXT_PUBLIC_GA_MEASUREMENT_ID \ + NEXT_PUBLIC_SEO_DISABLED \ + PAYLOAD_CONFIG_PATH="dist/payload.config.js" \ + PAYLOAD_PUBLIC_APP_URL \ + NEXT_PUBLIC_APP_LOGO_URL \ + PORT + +ENV NODE_ENV=production \ + PAYLOAD_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} \ + PORT=${PORT} \ + PAYLOAD_CONFIG_PATH=${PAYLOAD_CONFIG_PATH} \ + PAYLOAD_SECRET=${PAYLOAD_SECRET} \ + MONGODB_URL=${MONGODB_URL} \ + NEXT_PUBLIC_APP_LOGO_URL=${NEXT_PUBLIC_APP_LOGO_URL} \ + NEXT_PUBLIC_APP_NAME=${NEXT_PUBLIC_APP_NAME} \ + NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} + +WORKDIR /workspace/apps/codeforafrica + +EXPOSE ${PORT} + +CMD [ "node", "dist/server.js" ] diff --git a/apps/charterafrica/src/components/CommunityPlatforms/CommunityPlatforms.snap.js b/apps/charterafrica/src/components/CommunityPlatforms/CommunityPlatforms.snap.js index 080626aac..15984f47b 100644 --- a/apps/charterafrica/src/components/CommunityPlatforms/CommunityPlatforms.snap.js +++ b/apps/charterafrica/src/components/CommunityPlatforms/CommunityPlatforms.snap.js @@ -65,7 +65,7 @@ exports[` renders unchanged 1`] = ` renders unchanged 1`] = ` class="MuiTypography-root MuiTypography-p1 css-l6prdf-MuiTypography-root" > Created January 1, 2021 @@ -37,7 +37,7 @@ exports[` renders unchanged 1`] = ` class="MuiGrid-root MuiGrid-container MuiGrid-item MuiGrid-grid-xs-12 MuiGrid-grid-md-4 css-1phk7xb-MuiGrid-root" >
renders unchanged 1`] = `
renders unchanged 1`] = ` Open Dataset
renders unchanged 1`] = ` Share Via
diff --git a/apps/charterafrica/src/components/Datasets/Datasets.snap.js b/apps/charterafrica/src/components/Datasets/Datasets.snap.js index a565149de..474e83359 100644 --- a/apps/charterafrica/src/components/Datasets/Datasets.snap.js +++ b/apps/charterafrica/src/components/Datasets/Datasets.snap.js @@ -317,7 +317,7 @@ exports[` renders unchanged 1`] = ` Datasets diff --git a/apps/charterafrica/src/components/DesktopNavBar/DesktopNavBar.snap.js b/apps/charterafrica/src/components/DesktopNavBar/DesktopNavBar.snap.js index bb885f5d4..9aa320f17 100644 --- a/apps/charterafrica/src/components/DesktopNavBar/DesktopNavBar.snap.js +++ b/apps/charterafrica/src/components/DesktopNavBar/DesktopNavBar.snap.js @@ -9,7 +9,7 @@ exports[` renders unchanged 1`] = ` class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > diff --git a/apps/charterafrica/src/components/Document/Document.snap.js b/apps/charterafrica/src/components/Document/Document.snap.js index 4d3b482c9..4b72b1eb3 100644 --- a/apps/charterafrica/src/components/Document/Document.snap.js +++ b/apps/charterafrica/src/components/Document/Document.snap.js @@ -41,7 +41,7 @@ exports[` renders unchanged 1`] = ` class="MuiGrid-root MuiGrid-container MuiGrid-item MuiGrid-direction-xs-[object Object] MuiGrid-grid-xs-12 MuiGrid-grid-md-4 css-19fdzmu-MuiGrid-root" > @@ -56,7 +56,7 @@ exports[` renders unchanged 1`] = ` class="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 css-mqmitf-MuiGrid-root" >
renders unchanged 1`] = ` Share this document
diff --git a/apps/charterafrica/src/components/FeaturedPostCard/FeaturedPostCard.snap.js b/apps/charterafrica/src/components/FeaturedPostCard/FeaturedPostCard.snap.js index 20adbda31..1a67affee 100644 --- a/apps/charterafrica/src/components/FeaturedPostCard/FeaturedPostCard.snap.js +++ b/apps/charterafrica/src/components/FeaturedPostCard/FeaturedPostCard.snap.js @@ -20,7 +20,7 @@ exports[`FeaturedPostCard should render 1`] = ` class="MuiCardContent-root css-cnb62q-MuiCardContent-root" >
renders unchanged 1`] = ` class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > @@ -57,7 +57,7 @@ exports[` renders unchanged 1`] = ` class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > diff --git a/apps/charterafrica/src/components/Opportunity/Opportunity.snap.js b/apps/charterafrica/src/components/Opportunity/Opportunity.snap.js index f966b2ced..ac5b4229a 100644 --- a/apps/charterafrica/src/components/Opportunity/Opportunity.snap.js +++ b/apps/charterafrica/src/components/Opportunity/Opportunity.snap.js @@ -63,7 +63,7 @@ exports[` renders unchanged 1`] = ` class="MuiGrid-root MuiGrid-item css-13i4rnv-MuiGrid-root" > diff --git a/apps/charterafrica/src/components/OpportunityCard/OpportunityCard.snap.js b/apps/charterafrica/src/components/OpportunityCard/OpportunityCard.snap.js index 015766958..0392c57b7 100644 --- a/apps/charterafrica/src/components/OpportunityCard/OpportunityCard.snap.js +++ b/apps/charterafrica/src/components/OpportunityCard/OpportunityCard.snap.js @@ -6,7 +6,7 @@ exports[` renders unchanged 1`] = ` class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root css-s80wf8-MuiPaper-root-MuiCard-root" > diff --git a/apps/charterafrica/src/components/RichText/RichText.snap.js b/apps/charterafrica/src/components/RichText/RichText.snap.js index 66b366f35..5fa0ce56c 100644 --- a/apps/charterafrica/src/components/RichText/RichText.snap.js +++ b/apps/charterafrica/src/components/RichText/RichText.snap.js @@ -20,7 +20,7 @@ exports[` renders unchanged 1`] = ` > The project currently supports initiatives in 11 countries. Find out more here diff --git a/apps/charterafrica/src/components/ShareThisPage/ShareThisPage.snap.js b/apps/charterafrica/src/components/ShareThisPage/ShareThisPage.snap.js index 89c9aec8e..3f4172087 100644 --- a/apps/charterafrica/src/components/ShareThisPage/ShareThisPage.snap.js +++ b/apps/charterafrica/src/components/ShareThisPage/ShareThisPage.snap.js @@ -3,7 +3,7 @@ exports[` renders unchanged 1`] = ` -