include: - project: txlab/ci-templates file: docker-buildkit.gitlab-ci.yml # https://gitlab.com/txlab/ci-templates/-/blob/main/docker-buildkit.gitlab-ci.yml - project: txlab/ci-templates file: docker-ci-baseimage.gitlab-ci.yml # https://gitlab.com/txlab/ci-templates/-/blob/main/docker-ci-baseimage.gitlab-ci.yml - project: txlab/ci-templates file: web3.gitlab-ci.yml # https://gitlab.com/txlab/ci-templates/-/blob/main/web3.gitlab-ci.yml stages: - base - prep - build - deploy - deploy-ipns variables: DO_NOT_TRACK: 1 # https://consoledonottrack.com/ # NODE_OPTIONS: --max-old-space-size=32768 # ########## # BUILD # # ########## # prepare-ci-build-base: # # https://gitlab.com/txlab/ci-templates/-/blob/main/docker-ci-baseimage.gitlab-ci.yml # tags: # - dind pnpm install: stage: prep needs: [prepare-ci-build-base] image: $CI_REGISTRY_IMAGE/ci-base-build:$CI_COMMIT_SHA interruptible: true tags: - muchmem # so it runs on same runner as build rules: - changes: - pnpm-lock.yaml script: - pnpm config set store-dir $CI_PROJECT_DIR/.pnpm-store - cd apps/note3/ - echo "store-dir=$CI_PROJECT_DIR/.pnpm-store" >> .npmrc # allow caching - task pnpm-install # using task so it knows it's done - pnpm store prune # prune unused entries in the cache - https://github.com/pnpm/pnpm/issues/1174#issuecomment-390424397 cache: - key: pnpm-$CI_COMMIT_REF_SLUG fallback_keys: - pnpm-$CI_DEFAULT_BRANCH paths: - .pnpm-store/ - '**/node_modules/' - apps/note3/.task/checksum/pnpm-install build note3: stage: build image: $CI_REGISTRY_IMAGE/ci-base-build:$CI_COMMIT_SHA tags: - muchmem before_script: - pnpm config set store-dir $CI_PROJECT_DIR/.pnpm-store - export PATH=$PWD/apps/note3/node_modules/.bin:$(pnpm bin):$PATH && echo $PATH # HACK... pnpm bin paths script: - cd apps/note3/ - echo $CI_COMMIT_SHA > public/commit.txt - cat public/commit.txt - task build - cat dist/commit.txt - mkdir -p dist/shoelace - cp -r node_modules/@shoelace-style/shoelace/dist/assets dist/shoelace # https://shoelace.style/frameworks/react - pnpm store prune # prune unused entries in the cache - https://github.com/pnpm/pnpm/issues/1174#issuecomment-390424397 artifacts: paths: - apps/note3/dist/ cache: - key: pnpm-$CI_COMMIT_REF_SLUG fallback_keys: - pnpm-$CI_DEFAULT_BRANCH paths: - .pnpm-store/ - '**/node_modules/' - apps/note3/.task/checksum/pnpm-install policy: pull - key: note3-$CI_COMMIT_REF_SLUG fallback_keys: - note3-$CI_DEFAULT_BRANCH paths: - apps/note3/node_modules/.vite # https://v2.vitejs.dev/config/#cachedir - node_modules/.cache # https://dev.to/simonireilly/build-your-own-turborepo-remote-cache-3lk0 - apps/note3/.task/checksum/generate-pwa-icons - apps/note3/public/*.png - apps/note3/public/*.ico # ########## # PUBLISH # # ########## .publish_note3: stage: deploy needs: [build note3] rules: - if: $CI_COMMIT_REF_NAME != "live" variables: NAME_SUFFIX: ' dev' script: - cd apps/note3/ - echo $CI_COMMIT_SHA > dist/commit.txt - jq "(.name, .short_name) |= . + \"$NAME_SUFFIX\"" ./dist/manifest.webmanifest > tmp_manifest && mv tmp_manifest ./dist/manifest.webmanifest publish note3 ucan: extends: [.publish_note3, .publish_ucan] rules: - if: $CI_COMMIT_REF_NAME == "main" || $CI_COMMIT_REF_NAME == "live" variables: DIST_DIR: dist/ script: - !reference [.publish_note3, script] - !reference [.publish_ucan, script] - mv cid.txt $CI_PROJECT_DIR/ - mv *.car $CI_PROJECT_DIR/ publish note3 ucan reviewapp: extends: publish note3 ucan rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "live" variables: UCAN_UPLOAD_KEY: $UCAN_UPLOAD_KEY_REVIEWAPPS UCAN_UPLOAD_UCAN: $UCAN_UPLOAD_UCAN_REVIEWAPPS script: - !reference [publish note3 ucan, script] - CID=$(cat $CI_PROJECT_DIR/cid.txt) - echo "DYNAMIC_ENVIRONMENT_URL=${UCAN_UPLOAD_SERVICE_URL}/ipfs/${CID}" >> $CI_PROJECT_DIR/deploy.env artifacts: reports: dotenv: deploy.env environment: name: review/$CI_COMMIT_REF_SLUG url: $DYNAMIC_ENVIRONMENT_URL on_stop: null stop_ucan_reviewapp: rules: - when: never # publish note3 storacha: # extends: [.publish_w3up, .publish_note3] # rules: # - if: $CI_COMMIT_REF_NAME == "live" # - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH # script: # - !reference [.publish_note3, script] # - !reference [.publish_w3up, script] # ############## # UPDATE NAME # # ############## update ipns: extends: .publish_w3name stage: deploy-ipns needs: - job: publish note3 ucan artifacts: true # TODO: storacha separate?! rules: - if: $CI_COMMIT_REF_NAME == "live" variables: W3NAME_KEY: $W3NAME_KEY_LIVE CI_ENV_NAME: live CI_ENV_URL: https://note3.app - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH variables: W3NAME_KEY: $W3NAME_KEY_DEV CI_ENV_NAME: dev CI_ENV_URL: https://dev.note3.app environment: name: $CI_ENV_NAME url: $CI_ENV_URL script: - W3NAME_CID=$(cat cid.txt) - echo $W3NAME_CID - !reference [.publish_w3name, script] # publish note3 reviewapp: # extends: '.publish note3' # # Needs secret variable: FISSION_MACHINE_KEY_UNPROTECTED # environment: # name: review_$CI_COMMIT_REF_SLUG # url: https://note3_$CI_COMMIT_REF_SLUG.fission.app # rules: # - if: $CI_COMMIT_REF_NAME != "live" && $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH # variables: # FISSION_NAME: note3_$CI_COMMIT_REF_SLUG # FISSION_MACHINE_KEY: $FISSION_MACHINE_KEY_UNPROTECTED # before_script: # # - !reference [.publish note3, before_script] # - cd apps/note3/ # - mv fission.yaml fission.yaml.bkp # - fission app register -n $FISSION_NAME -b dist/ || true # HACK need to register for reviewapps the first time, the second time it will error # - mv fission.yaml.bkp fission.yaml # - 'cd -' # HACK don't think it's needed