version: 2.1 executors: cider-ci: docker: - image: cimg/node:lts-browsers working_directory: ~/Cider orbs: # Add orbs to your configuration jira: circleci/jira@1.0.5 # invokes the Jira orb, making its commands accessible gh: circleci/github-cli@2.1 # The jobs for this project jobs: prepare-build: executor: cider-ci steps: - checkout - run: command: | sudo npm i -g pnpm pnpm config set store-dir ~/.pnpm-store - run: name: Fetch Application Version command: ./resources/version.sh || true - restore_cache: key: dependency-cache-{{ checksum "pnpm-lock.yaml" }} - run: name: Clear node_airtunes2 cache command: rm -rf ~/.pnpm-store/tmp/cf5bc2de2629636ca224995234b8eaa1 || true - run: name: Install Node Dependencies command: pnpm install --frozen-lockfile - run: name: TypeScript Compile command: pnpm run build - save_cache: key: dependency-cache-{{ checksum "pnpm-lock.yaml" }} paths: - node_modules - ~/.pnpm-store - persist_to_workspace: # Must be an absolute path, or relative path from working_directory. This is a directory on the container which is # taken to be the root directory of the workspace. root: . # Must be relative path from root paths: - src - node_modules - build - resources - package.json - winget.json # winget.json is a file that is generated by the winget package manager - LICENSE build-linux: docker: - image: electronuserland/builder:wine steps: - attach_workspace: at: ~/project - run: name: Generate Builds (Linux) command: yarn electron-builder -l -p never post-steps: - jira/notify - persist_to_workspace: root: . paths: - dist/*.deb - dist/*.AppImage - dist/*.snap - dist/latest-linux.yml build-windows: docker: - image: electronuserland/builder:wine steps: - attach_workspace: at: ~/project - run: name: Generate Builds (Windows) command: yarn electron-builder -w --x64 -p never post-steps: - jira/notify - persist_to_workspace: root: . paths: - dist/*.exe - dist/Cider-Setup-*.exe.blockmap - dist/latest.yml build-winget: docker: - image: electronuserland/builder:wine steps: - attach_workspace: at: ~/project - run: name: Generate Builds (Winget) command: yarn electron-builder --win -c winget.json -p never post-steps: - jira/notify - persist_to_workspace: root: . paths: - dist/*.exe - dist/Cider-Setup-winget-*.exe.blockmap release: executor: cider-ci steps: - attach_workspace: at: ~/Cider/ - gh/install - run: name: Move Build Files command: | mkdir ~/Cider/dist/artifacts/ mv ~/Cider/dist/*.exe ~/Cider/dist/artifacts mv ~/Cider/dist/*.deb ~/Cider/dist/artifacts mv ~/Cider/dist/*.AppImage ~/Cider/dist/artifacts mv ~/Cider/dist/*.snap ~/Cider/dist/artifacts mv ~/Cider/dist/*.yml ~/Cider/dist/artifacts mv ~/Cider/dist/*.blockmap ~/Cider/dist/artifacts - store_artifacts: path: ~/Cider/dist/artifacts - run: name: Run Version Script command: | sudo chmod +x resources/version.sh && ./resources/version.sh || true echo "export APP_VERSION=$(node -p -e 'require("./package.json").version')" >>$BASH_ENV - run: name: Publish Release command: | echo "Attempting to create release for Cider v${APP_VERSION} on the ${CIRCLE_BRANCH} branch."; if [[ "${APP_VERSION}" = *"beta"* ]]; then echo $'**Beta Release**\nA full changelog is unavailable, but you can view the branch comparison [here](https://github.com/ciderapp/cider/compare/stable...main).\nThese builds are considered bleeding edge, expect bugs and please do not use this as a representation of the fu ll app.\nOur full support disclaimer can be found [here](https://docs.cider.sh/support/disclaimer#support-nightly-beta-releases).' > release-notes.md gh release create "v${APP_VERSION}" --prerelease --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap curl http://129.146.42.180/api/v1/github/sync/main else echo $'**Stable Release**\nA full changelog is unavailable, but you can view the branch comparison [here](https://github.com/ciderapp/cider/compare/stable...main).\nThese are the most stable builds we can provide. If you experience any issues, please report them [here](https://github.com/ciderapp/cider/issues/new).\nOur full support disclaimer can be found [here](https://docs.cider.sh/support/disclaimer#support-releases).' > release-notes.md gh release create "v${APP_VERSION}" --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --notes-file release-notes.md -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap curl http://129.146.42.180/api/v1/github/sync/stable fi; # Orchestrate our job run sequence workflows: build_and_release: jobs: - prepare-build: filters: branches: only: - main - stable - steam-deck - build-windows: requires: - prepare-build filters: branches: only: - main - stable - build-linux: requires: - prepare-build filters: branches: only: - main - stable - steam-deck - build-winget: requires: - prepare-build filters: branches: only: - main - stable - release: requires: - build-windows - build-linux - build-winget filters: branches: only: - main - stable - steam-deck