version: 2.1 executors: default: working_directory: /tmp/workspace docker: - image: misskey/ci:latest - image: circleci/mongo:latest with-redis: working_directory: /tmp/workspace docker: - image: misskey/ci:latest - image: circleci/mongo:latest - image: circleci/redis:latest docker: working_directory: /tmp/workspace docker: - image: docker:latest jobs: build: executor: default steps: - checkout - run: name: Ensure yarn.lock command: | touch yarn.lock - restore_cache: name: Restore npm package caches keys: - yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}-package-{{ checksum "package.json" }}-lock-{{ checksum "yarn.lock" }} - yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}-package-{{ checksum "package.json" }}- - yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}- - yarn-v1-arch-{{ arch }}- - yarn-v1- - run: name: Install Dependencies command: | yarn install - run: name: Configure command: | cp .circleci/misskey/default.yml .config cp .circleci/misskey/test.yml .config - run: name: Build command: | yarn build touch yarn.lock - save_cache: name: Cache npm packages key: yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}-package-{{ checksum "package.json" }}-lock-{{ checksum "yarn.lock" }} paths: - node_modules - persist_to_workspace: root: . paths: - . test: parameters: executor: type: string default: "default" without_redis: type: boolean default: false executor: <> steps: - attach_workspace: at: /tmp/workspace - when: condition: <> steps: - run: name: Configure command: | mv .config/test.yml .config/test_redis.yml touch .config/test.yml cat .config/test_redis.yml | while IFS= read line; do if [[ "$line" = '# __REDIS__' ]]; then break; else echo "$line" >> .config/test.yml; fi; done - run: name: Test command: | yarn test touch yarn.lock - save_cache: name: Cache npm packages key: yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}-package-{{ checksum "package.json" }}-lock-{{ checksum "yarn.lock" }} paths: - node_modules docker: parameters: with_deploy: type: boolean default: false executor: docker steps: - checkout - setup_remote_docker - run: name: Build command: | docker build -t misskey/misskey . - when: condition: <> steps: - run: name: Deploy command: | if [ "$DOCKERHUB_USERNAME$DOCKERHUB_PASSWORD" ] then apk update && apk add jq docker tag misskey/misskey misskey/misskey:$(cat package.json | jq -r .version) docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD docker push misskey/misskey else echo -e '\033[0;33mAborted deploying to Docker Hub\033[0;39m' fi workflows: version: 2 nodejs: jobs: - hold: name: manual-build-trigger type: approval filters: branches: ignore: master - build: name: manual-build requires: - manual-build-trigger filters: branches: ignore: master - build: name: auto-build filters: branches: only: master - test: name: manual-test-with-redis executor: with-redis requires: - manual-build filters: branches: ignore: master - test: name: auto-test-without-redis executor: with-redis requires: - auto-build filters: branches: only: master - test: name: manual-test-with-redis without_redis: true requires: - manual-build filters: branches: ignore: master - test: name: auto-test-without-redis without_redis: true requires: - auto-build filters: branches: only: master docker: jobs: - hold: name: manual-build-trigger type: approval filters: branches: ignore: master - docker: name: manual-build requires: - manual-build-trigger filters: branches: ignore: master - docker: name: auto-build with_deploy: true filters: branches: only: master