diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 1297437f..60294db3 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -1,31 +1,19 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# name: "macOS build" on: push: - branches: [ main ] + branches: [ main, stable ] paths-ignore: - - 'README.md' - - 'SECURITY.md' - - '.gitmodules' - - '.gitignore' - - 'LICENSE' - schedule: - - cron: '44 20 * * 1' + - 'README.md' + - 'SECURITY.md' + - '.gitmodules' + - '.gitignore' + - 'LICENSE' + - 'cider.lock' jobs: - analyze: - name: macOS build + build-macos: + name: build-macos runs-on: macos-11 permissions: actions: read @@ -36,115 +24,102 @@ jobs: fail-fast: false matrix: language: [ 'javascript' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] - # Learn more: - # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: '12.4' - - - name: Checkout repository - uses: actions/checkout@v2 - with: - submodules: true + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '12.4' - # Initializes the CodeQL tools for scanning. -# - name: Initialize CodeQL -# uses: github/codeql-action/init@v1 -# with: -# languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Change Version + run: sudo chmod +x resources/version.sh && ./resources/version.sh || true + + - name: Sign in to EVS + run: | + python3 -m pip install --upgrade castlabs-evs + python3 -m castlabs_evs.account refresh -A ${{ secrets.EVS_ACCOUNT_NAME }} -P ${{ secrets.EVS_PASSWD }} + + - name: Setup Environment + run: brew install automake #libtool autoconf + + - name: Install and Configure Node Modules + run: | + yarn install + cp resources/verror-types node_modules/@types/verror/index.d.ts + cp resources/macPackager.js node_modules/app-builder-lib/out/macPackager.js + rm -r node_modules/pouchdb-node/node_modules/leveldown + rm -r node_modules/pouchdb-adapter-leveldb/node_modules/leveldown + + - name: Build the DMG + env: + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + APPLEID: ${{ secrets.APPLEID }} + APPLEIDPASS: ${{ secrets.APPLEIDPASS }} + APPLE_ID: ${{ secrets.APPLEID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLEIDPASS }} + PSC_NAME: ${{ secrets.PSC_NAME }} + DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer + run: yarn dist:universalNotWorking -p never + + - name: Add license to DMG + run: npx dmg-license resources/license.json dist/*.dmg + + - name: Upload DMG + uses: svenstaro/upload-release-action@v2 + with: + repo_name: ciderapp/cider-releases + repo_token: ${{ secrets.RELEASE_TOKEN }} + file: dist/Cider-${{ env.APP_VERSION }}-universal.dmg + tag: v${{ env.APP_VERSION }} + + - name: Upload macOS Latest + uses: svenstaro/upload-release-action@v2 + with: + repo_name: ciderapp/cider-releases + repo_token: ${{ secrets.RELEASE_TOKEN }} + file: dist/latest-mac.yml + tag: v${{ env.APP_VERSION }} + + - name: Import + uses: apple-actions/import-codesign-certs@v1 + with: + p12-file-base64: ${{ secrets.CSC_LINK }} + p12-password: ${{ secrets.CSC_KEY_PASSWORD }} + + - name: Build the PKG + env: + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + APPLEID: ${{ secrets.APPLEID }} + APPLEIDPASS: ${{ secrets.APPLEIDPASS }} + run: | + pkgbuild --component dist/mac-universal/Cider.app --install-location /Applications dist/Cider-${{ env.APP_VERSION }}-universal.pkg --sign ${{ secrets.PSC_NAME }} + xcrun altool --notarize-app --primary-bundle-id com.ciderapp.cider -f dist/Cider*.pkg --username ${{ secrets.APPLEID }} --password ${{ secrets.APPLEIDPASS }} + sleep 5m + xcrun stapler staple dist/Cider*.pkg || true + + - name: Upload PKG + uses: svenstaro/upload-release-action@v2 + with: + repo_name: ciderapp/cider-releases + repo_token: ${{ secrets.RELEASE_TOKEN }} + file: dist/Cider-${{ env.APP_VERSION }}-universal.pkg + tag: v${{ env.APP_VERSION }} + + - name: Upload a Build Artifact + uses: actions/upload-artifact@v2.2.3 + with: + name: Cider-macOS-${{ env.APP_VERSION }} + path: | + dist/*.dmg + dist/*.pkg + dist/latest-mac.yml - # â„šī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - # âœī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - -# - name : env -# run: | -# export EVS_ACCOUNT_NAME=${{ secrets.EVS_ACCOUNT_NAME}} && export EVS_PASSWD=${{ secrets.EVS_PASSWD }} -# export CSC_LINK=${{ secrets.CSC_LINK }} && export CSC_KEY_PASSWORD=${{ secrets.CSC_KEY_PASSWORD }} -# export APPLEID=${{ secrets.APPLEID }} && export APPLEIDPASS=${{ secrets.APPLEIDPASS }} - - - name: Sign in to EVS - run: | - python3 -m pip install --upgrade castlabs-evs - python3 -m castlabs_evs.account refresh -A ${{ secrets.EVS_ACCOUNT_NAME }} -P ${{ secrets.EVS_PASSWD }} - - - name : Build - env: - CSC_LINK: ${{ secrets.CSC_LINK }} - CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} - APPLEID: ${{ secrets.APPLEID }} - APPLEIDPASS: ${{ secrets.APPLEIDPASS }} - APPLE_ID: ${{ secrets.APPLEID }} - APPLE_ID_PASSWORD: ${{ secrets.APPLEIDPASS }} - PSC_NAME: ${{ secrets.PSC_NAME }} - DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer - run: | - rm cider-yarn.lock || true - xcodebuild -version - brew install autoconf automake libtool - yarn install - cp resources/verror-types node_modules/@types/verror/index.d.ts - cp resources/macPackager.js node_modules/app-builder-lib/out/macPackager.js - rm -r node_modules/pouchdb-node/node_modules/leveldown - rm -r node_modules/pouchdb-adapter-leveldb/node_modules/leveldown - rm -r /node_modules/leveldown/node_modules/node-gyp-build || true - yarn dist:universalNotWorking -p never -# - name: Perform CodeQL Analysis -# uses: github/codeql-action/analyze@v1 - - name: Add license to dmg - run: | - npx dmg-license resources/license.json dist/*.dmg - - - name: Import - uses: apple-actions/import-codesign-certs@v1 - with: - p12-file-base64: ${{ secrets.CSC_LINK }} - p12-password: ${{ secrets.CSC_KEY_PASSWORD }} - - name: Create PKG manually - env: - CSC_LINK: ${{ secrets.CSC_LINK }} - CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} - APPLEID: ${{ secrets.APPLEID }} - APPLEIDPASS: ${{ secrets.APPLEIDPASS }} - run: | - pkgbuild --component dist/mac-universal/Cider.app --install-location /Applications dist/Cider.pkg --sign ${{ secrets.PSC_NAME }} - xcrun altool --notarize-app --primary-bundle-id com.ciderapp.cider -f dist/Cider.pkg --username ${{ secrets.APPLEID }} --password ${{ secrets.APPLEIDPASS }} - sleep 5m - xcrun stapler staple dist/Cider.pkg || true - mv dist/*.dmg dist/Cider.dmg - - name: Upload a Build Artifact - uses: actions/upload-artifact@v2.2.3 - with: - # Artifact name - name: macOS - # A file, directory or wildcard pattern that describes what to upload - path: | - dist/*.dmg - dist/*.pkg - # The desired behavior if no files are found using the provided path. - - name: Release - uses: softprops/action-gh-release@v1 - with: - files: | - dist/Cider.dmg - dist/Cider.pkg - body: signed Develop MacOS Builds - name: macOS builds - tag_name: macos-beta - target_commitish: ${{ env.GITHUB_SHA }} - prerelease: true - generate_release_notes: true - fail_on_unmatched_files: false diff --git a/resources/version.sh b/resources/version.sh index 8184da46..d9464293 100755 --- a/resources/version.sh +++ b/resources/version.sh @@ -1,20 +1,28 @@ #!/bin/bash -LATEST_SHA=$(curl -s https://api.github.com/repos/ciderapp/Cider/branches/stable | grep '"sha"' | head -1 | cut -d '"' -f 4) -SHA_DATE=$(git show -s --format=%ci $LATEST_SHA) -COMMITSINCESTABLE=$(git rev-list $LATEST_SHA..HEAD --count --since="$SHA_DATE") +STABLE_SHA=$(curl -s https://api.github.com/repos/ciderapp/Cider/branches/stable | grep '"sha"' | head -1 | cut -d '"' -f 4) +SHA_DATE=$(git show -s --format=%ci $STABLE_SHA) +COMMITSINCESTABLE=$(git rev-list $STABLE_SHA..HEAD --count --since="$SHA_DATE") CURRENT_VERSION=$(node -p -e "require('./package.json').version") -if [[ $CIRCLE_BRANCH == "main" && $COMMITSINCESTABLE -gt 0 ]]; then + +# Set the version number for commits on main branch +if [[ ($CIRCLE_BRANCH == "main" || $GITHUB_REF_NAME == "main") && $COMMITSINCESTABLE -gt 0 ]]; then NEW_VERSION="${CURRENT_VERSION}-beta.${COMMITSINCESTABLE}" + + # Update the version in package.json + if [[ $RUNNER_OS == "macOS" ]]; then + sed -i "" -e "s/$CURRENT_VERSION/$NEW_VERSION/" package.json + else + sed -i "0,/$CURRENT_VERSION/s//$NEW_VERSION/" package.json + fi + echo "Version updated to v${NEW_VERSION}" else - NEW_VERSION=${CURRENT_VERSION/0/$COMMITSINCESTABLE} + echo "Not on main branch or no commits since stable. Skipping version update." fi -if [[ $COMMITSINCESTABLE -gt 0 ]]; then - echo "Version: $NEW_VERSION" - sed -i "0,/$CURRENT_VERSION/s//$NEW_VERSION/" package.json +# Add the version to the environment for CI usage +if [[ $GITHUB_REF_NAME != "" ]]; then + echo "APP_VERSION=$(node -p -e 'require("./package.json").version')" >>$GITHUB_ENV else - echo "Version unchanged, commits since stable is ${COMMITSINCESTABLE}" + echo "export APP_VERSION=$(node -p -e 'require("./package.json").version')" >>$BASH_ENV fi - -echo "export APP_VERSION=$(node -p -e 'require("./package.json").version')" >>$BASH_ENV