diff --git a/.actrc b/.actrc new file mode 100644 index 0000000..cd64307 --- /dev/null +++ b/.actrc @@ -0,0 +1,8 @@ +--action-offline-mode +--eventpath .github/event.json +--container-architecture linux/amd64 +--log-prefix-job-id +--platform macos-15=-self-hosted +--pull=false +--reuse +--secret-file .secrets diff --git a/.editorconfig b/.editorconfig index cf084a8..1f913cd 100644 --- a/.editorconfig +++ b/.editorconfig @@ -27,6 +27,7 @@ indent_style = tab # JSON files contain newlines inconsistently [*.json] +indent_size = 2 insert_final_newline = ignore # Makefiles always use tabs for indentation diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ef58025..254c418 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,4 +1,5 @@ # https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates +--- version: 2 updates: - package-ecosystem: "github-actions" diff --git a/.github/event.json b/.github/event.json new file mode 100644 index 0000000..85ba787 --- /dev/null +++ b/.github/event.json @@ -0,0 +1,12 @@ +{ + "inputs": { + "NAME": "Manual Workflow", + "SOME_VALUE": "ABC" + }, + "release": { + "name": "v1.8.6-beta.1: macOS only test build", + "tag_name": "v1.8.7-beta.1", + "target_commitish": "f8be3e9aaa6c78490277976f17041f2577f5dc21", + "body": "This is a pre-release to facilitate testing for the following fix:\n\n - ๐Ÿ–ฅ๏ธ Only search, outdated and update macOS apps (#505, #496, #491, #336)" + } +} \ No newline at end of file diff --git a/.github/release.yml b/.github/release.yml index 778688d..add94e5 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -1,12 +1,13 @@ # https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes +--- changelog: categories: - - title: '๐Ÿš€ Features' + - title: "๐Ÿš€ Features" labels: - - '๐Ÿ†• feature request' - - title: '๐Ÿ› Bug Fixes' + - "๐Ÿ†• feature request" + - title: "๐Ÿ› Bug Fixes" labels: - - '๐Ÿ› bug' + - "๐Ÿ› bug" - title: Changes labels: - - '*' + - "*" diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 6c21b68..451d38a 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -2,14 +2,14 @@ # .github/workflows/build-test.yml # # https://docs.github.com/en/actions/reference/environment-variables#default-environment-variables - +--- name: Build, Test, and Lint on: - push: - branches: [ main ] pull_request: - branches: [ main ] + branches: [main] + push: + branches: [main] concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -17,6 +17,10 @@ concurrency: jobs: build-test: + name: Build, Test, and Lint + + # https://github.com/actions/runner-images#available-images + runs-on: macos-15 defaults: run: @@ -26,28 +30,20 @@ jobs: # https://github.com/actions/virtual-environments/issues/2187#issuecomment-790507204 shell: arch -arm64 bash --noprofile --norc -eo pipefail {0} - name: Build, Test, and Lint - - # https://github.blog/changelog/2024-01-30-github-actions-introducing-the-new-m1-macos-runner-available-to-open-source - # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners - # https://github.com/mas-cli/mas/actions/runners - runs-on: macos-15 - steps: - # https://github.com/actions/checkout#usage - - uses: actions/checkout@v4 - with: - # A fetch-depth of 0 includes all history and tags for script/version - fetch-depth: 0 + - uses: actions/checkout@v4 + with: + # A fetch-depth of 0 includes all history and tags for script/version + fetch-depth: 0 - - name: Bootstrap - run: script/bootstrap + - name: Bootstrap + run: script/bootstrap -f - - name: Build - run: script/build + - name: Build + run: script/build - - name: Test - run: script/test + - name: Test + run: script/test - - name: Lint - run: script/lint + - name: Lint + run: script/lint diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml index cbe8a05..f278c8d 100644 --- a/.github/workflows/danger.yml +++ b/.github/workflows/danger.yml @@ -1,17 +1,21 @@ -name: Danger +# +# .github/workflows/danger.yml +# +# https://docs.github.com/en/actions/reference/environment-variables#default-environment-variables +--- +name: danger on: pull_request: - branches: [ main ] + branches: [main] jobs: danger: - name: Danger runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Danger - # https://github.com/orgs/danger/packages/container/package/danger-swift - uses: docker://ghcr.io/danger/danger-swift:3.12.3 - with: - args: --failOnErrors --no-publish-check - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v4 + - name: Danger + # https://github.com/orgs/danger/packages/container/package/danger-swift + uses: docker://ghcr.io/danger/danger-swift:3.18.0 + with: + args: --failOnErrors --no-publish-check + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..428fee5 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,254 @@ +# +# .github/workflows/release.yml +# +--- +name: release +defaults: + run: + # Prefixes all `run` commands with the following command to force them to run outside Rosetta. + shell: arch -arm64 bash --noprofile --norc -eo pipefail {0} +on: + release: + types: [published] +jobs: + start: + runs-on: macos-15 + outputs: + dry_run: ${{ steps.dry_run.outputs.dry_run }} + mas_version: ${{ steps.mas_version.outputs.mas_version }} + pre_release: ${{ steps.pre_release.outputs.pre_release }} + release_branch: ${{ steps.release_branch.outputs.release_branch }} + steps: + # Logs event details and sets `DRY_RUN` env var + # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable + # https://docs.github.com/en/webhooks/webhook-events-and-payloads?actionType=published#release + - name: ๐Ÿ”ˆ Log release event + # This step will only run for a real 'release' event. + if: ${{ github.event.release.name != '' }} + run: | + echo "Triggered by a release publication event (wet run)" + echo "release.name: ${{ github.event.release.name }}" + echo "release.tag_name: ${{ github.event.release.tag_name }}" + echo "release.target_commitish: ${{ github.event.release.target_commitish }}" + echo -e "release.body: \n${{ github.event.release.body }}" + + - id: dry_run + run: | + echo "DRY_RUN=false" >>"$GITHUB_OUTPUT" + + - id: mas_version + run: | + echo "MAS_VERSION=${{ github.event.release.tag_name }}" >>"$GITHUB_OUTPUT" + + - id: pre_release + run: | + echo "PRE_RELEASE=$(grep -q '-' <<<$MAS_VERSION && echo 'true' || echo 'false')" >>"$GITHUB_OUTPUT" + + - id: release_branch + run: | + echo "RELEASE_BRANCH=releases/release-${{ github.event.release.tag_name }}" >>"$GITHUB_OUTPUT" + + prepare-release: + runs-on: macos-15 + needs: [start] + steps: + - uses: actions/checkout@v4 + with: + # A fetch-depth of 0 includes all history and tags for script/version + fetch-depth: 0 + + - name: ๐Ÿ‘ข Bootstrap + run: | + script/bootstrap -f + + - name: ๐Ÿ”€ Create mas release branch + env: + RELEASE_BRANCH: ${{ needs.start.outputs.release_branch }} + run: | + git branch "${RELEASE_BRANCH}" + git switch "${RELEASE_BRANCH}" + + - name: ๐Ÿ”– Update version + env: + MAS_VERSION: ${{ needs.start.outputs.mas_version }} + run: | + script/version_bump "${MAS_VERSION}" + + - name: ๐Ÿ”ง Configure Git Author + run: | + git config --global user.name 'masclibot' + git config --global user.email 'masclibot@users.noreply.github.com' + + - name: ๐Ÿ’พ Commit changes + env: + MAS_VERSION: ${{ needs.start.outputs.mas_version }} + RELEASE_BRANCH: ${{ needs.start.outputs.release_branch }} + run: | + git add \ + "Homebrew/mas.rb" \ + "Homebrew/mas-tap.rb" \ + "Package.swift" + git commit \ + --message="๐Ÿ”– Version ${MAS_VERSION}" + git push \ + --set-upstream origin "${RELEASE_BRANCH}" + + pkg-installer: + runs-on: macos-15 + needs: [start, prepare-release] + steps: + - uses: actions/checkout@v4 + with: + # A fetch-depth of 0 includes all history and tags for script/version + fetch-depth: 0 + ref: ${{ needs.start.outputs.release_branch }} + + - name: ๐Ÿ‘ข Bootstrap + run: | + script/bootstrap -f + + # Important to trigger a universal build first as package just works with + # the `mas` binary in finds in the build dir. + - name: ๐Ÿ—๏ธ Build Universal + run: | + script/build --universal + + - name: ๐Ÿ“ฆ macOS Package + run: | + script/package + + - name: ๐Ÿš€ Upload mas.pkg + env: + GH_TOKEN: ${{ github.token }} + DRY_RUN: ${{ needs.start.outputs.dry_run }} + MAS_VERSION: ${{ needs.start.outputs.mas_version }} + if: ${{ needs.start.outputs.dry_run == 'false' }} + run: | + gh release upload ${MAS_VERSION} \ + .build/mas.pkg + + homebrew-tap: + runs-on: macos-15 + needs: [start, prepare-release] + steps: + - name: ๐Ÿ“บ Checkout mas repo + uses: actions/checkout@v4 + with: + # A fetch-depth of 0 includes all history and tags for script/version + fetch-depth: 0 + ref: ${{ needs.start.outputs.release_branch }} + + - name: ๐Ÿ‘ข Bootstrap + run: | + script/bootstrap -f + + # The mas-cli/homebrew-tap repo needs to be checked out using the current + # GitHub credentials in order to open a PR. However, the `brew tap` command + # must be run for Homebrew to see the dir as a tap. + # This is necessary to avoid the following error: + # Error: No available formula or cask with the name "mas-cli/tap/mas". + - name: ๐Ÿšฐ Checkout mas tap + run: | + rm -rf /opt/homebrew/Library/Taps + mkdir Taps + ln -s $(realpath Taps) /opt/homebrew/Library/Taps + ls -l /opt/homebrew/Library/Taps + brew tap mas-cli/tap + brew tap + + # Checkout with a token for write access + - name: ๐Ÿšฐ Re-clone mas tap + uses: actions/checkout@v4 + with: + repository: mas-cli/homebrew-tap + token: ${{ secrets.DEPLOY_TOKEN }} + # brew --repository mas-cli/tap + path: Taps/mas-cli/homebrew-tap + + - name: ๐Ÿ”ง Configure Git Author + run: | + git config --global user.name 'masclibot' + git config --global user.email 'masclibot@users.noreply.github.com' + + - name: โคด๏ธ Open mas tap PR + env: + GITHUB_TOKEN: ${{ secrets.DEPLOY_TOKEN }} + DRY_RUN: ${{ needs.start.outputs.dry_run }} + RELEASE_BRANCH: ${{ needs.start.outputs.release_branch }} + MAS_VERSION: ${{ needs.start.outputs.mas_version }} + working-directory: /opt/homebrew/Library/Taps/mas-cli/homebrew-tap + run: | + git branch "${RELEASE_BRANCH}" + git switch "${RELEASE_BRANCH}" + + cp -v \ + ${GITHUB_WORKSPACE}/Homebrew/mas-tap.rb \ + Formula/mas.rb + + git add Formula/mas.rb + git commit --message="๐Ÿ”– Version ${MAS_VERSION}" + + git push \ + --set-upstream origin "${RELEASE_BRANCH}" + + gh pr create \ + --assignee phatblat \ + --base main \ + --head "${RELEASE_BRANCH}" \ + --title "๐Ÿ”– Version ${MAS_VERSION}" \ + --body "This PR contains the changes from releasing version \ + [${MAS_VERSION}](https://github.com/mas-cli/mas/releases/tag/${MAS_VERSION})." + + - name: ๐Ÿšฐ Update mas tap formula + env: + GH_TOKEN: ${{ github.token }} + DRY_RUN: ${{ needs.start.outputs.dry_run }} + MAS_VERSION: ${{ needs.start.outputs.mas_version }} + run: | + DRY_RUN=${DRY_RUN} \ + script/brew_tap_update ${MAS_VERSION} + + - name: ๐Ÿš€ Upload Bottles + env: + GH_TOKEN: ${{ github.token }} + DRY_RUN: ${{ needs.start.outputs.dry_run }} + MAS_VERSION: ${{ needs.start.outputs.mas_version }} + if: ${{ needs.start.outputs.dry_run == 'false' }} + run: | + gh release upload ${MAS_VERSION} \ + .build/bottles/mas-*.bottle.tar.gz + + homebrew-core: + runs-on: macos-15 + needs: [start, prepare-release, homebrew-tap] + env: + PRE_RELEASE: ${{ needs.start.outputs.pre_release }} + steps: + - uses: actions/checkout@v4 + if: env.PRE_RELEASE == 'false' + with: + # A fetch-depth of 0 includes all history and tags for script/version + fetch-depth: 0 + ref: ${{ needs.start.outputs.release_branch }} + + - name: ๐Ÿ‘ข Bootstrap + if: env.PRE_RELEASE == 'false' + run: | + script/bootstrap -f + + - name: ๐Ÿ”ง Configure Git Author + if: env.PRE_RELEASE == 'false' + run: | + git config --global user.name 'masclibot' + git config --global user.email 'masclibot@users.noreply.github.com' + + - name: ๐Ÿบ Update Homebrew mas formula + env: + GH_TOKEN: ${{ github.token }} + HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }} + DRY_RUN: ${{ needs.start.outputs.dry_run }} + MAS_VERSION: ${{ needs.start.outputs.mas_version }} + if: env.PRE_RELEASE == 'false' + run: | + DRY_RUN=${DRY_RUN} \ + script/brew_core_update ${MAS_VERSION} diff --git a/.gitignore b/.gitignore index 70f7959..2b6a070 100644 --- a/.gitignore +++ b/.gitignore @@ -27,15 +27,18 @@ .fseventsd .idea/ .rubygems/ +.secrets .swiftpm/ +.vscode/ Carthage/ DerivedData Pods/ +Sources/mas/Package.swift +Sources/MasKit/Package.swift Temporary Items bin/ build/ default.profraw +gha/ releases/ xcuserdata -Sources/mas/Package.swift -Sources/MasKit/Package.swift diff --git a/.mise.toml b/.mise.toml new file mode 100644 index 0000000..c0c7b45 --- /dev/null +++ b/.mise.toml @@ -0,0 +1,11 @@ +# +# .mise.toml +# https://mise.jdx.dev/configuration.html +# + +[tools] +act = "0.2.60" +"npm:prettier" = "3.2.5" + +[settings] +experimental = true diff --git a/.periphery.yml b/.periphery.yml index bc809cc..f35a82f 100644 --- a/.periphery.yml +++ b/.periphery.yml @@ -1,2 +1,3 @@ +--- retain_public: true strict: true diff --git a/.swiftlint.yml b/.swiftlint.yml index 8457f4e..10d3144 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -6,35 +6,35 @@ # --- opt_in_rules: -- all + - all disabled_rules: -- balanced_xctest_lifecycle -- closure_body_length -- contrasted_opening_brace -- explicit_acl -- explicit_enum_raw_value -- explicit_top_level_acl -- explicit_type_interface -- file_header -- file_name -- final_test_case -- force_unwrapping -- function_body_length -- inert_defer -- legacy_objc_type -- no_extension_access_modifier -- no_grouping_extension -- number_separator -- one_declaration_per_file -- prefer_nimble -- prefixed_toplevel_constant -- quick_discouraged_call -- quick_discouraged_pending_test -- required_deinit -- sorted_enum_cases -- trailing_comma -- unused_capture_list -- vertical_whitespace_between_cases + - balanced_xctest_lifecycle + - closure_body_length + - contrasted_opening_brace + - explicit_acl + - explicit_enum_raw_value + - explicit_top_level_acl + - explicit_type_interface + - file_header + - file_name + - final_test_case + - force_unwrapping + - function_body_length + - inert_defer + - legacy_objc_type + - no_extension_access_modifier + - no_grouping_extension + - number_separator + - one_declaration_per_file + - prefer_nimble + - prefixed_toplevel_constant + - quick_discouraged_call + - quick_discouraged_pending_test + - required_deinit + - sorted_enum_cases + - trailing_comma + - unused_capture_list + - vertical_whitespace_between_cases file_types_order: order: [ [main_type], diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 97b425b..0000000 --- a/.travis.yml +++ /dev/null @@ -1,49 +0,0 @@ -# -# .travis.yml -# mas-cli -# -# https://travis-ci.com/mas-cli/mas -# https://docs.travis-ci.com/user/reference/osx/ -# https://docs.travis-ci.com/user/languages/objective-c/ -# - -# https://docs.travis-ci.com/user/build-config-validation -version: ~> 1.0 - -# https://docs.travis-ci.com/user/reference/osx/#macos-version -os: osx -osx_image: xcode11.5 # macOS 10.15.4 - -env: - global: - - LANG=en_US.UTF-8 - - LC_ALL=en_US.UTF-8 - - LANGUAGE=en_US.UTF-8 - -# Bundler 2 -# https://docs.travis-ci.com/user/languages/ruby/#bundler-20 -before_install: - - gem install bundler - -install: - - script/bootstrap - -script: - - script/build - - script/test - - bundle exec danger - -before_deploy: - - script/package - -deploy: - provider: releases - api_key: - secure: SEAdxkLeRJ/z7cO4Y//8sxrYbNlzz3W4ip717gcMsuxp6LzsQtS7QW+/N3iSNuowgIKqTad0ZdiYHczwa+mTI/rjPDP1mxC4Bx+pQpZN+bizY9MNVcDDTSD6yCvI1vZl+dLQwUKKzW/lTKDk4yunOmxLV4xtDE7EDfyf1Zkypx0mQ6SoG2cFHZVDrDrU4c05oPtD/3dTvq2lVf5suBhjrRNLSOpIU4fPgc3PbPCL1MtIZRQpGfVPGWZLRMOHLXNIKFkP1qaa6Z2+R1iZjtqZ5isECikRNSPeBYm7OWx/EoGqRbC64YVIjTKi17rjEHDf46RxskPKa4Df6i2X4HCzhZBKcVB/Zu4HpjaR8gMcTCT0QnfHpDDgyAMVBPW84uyhfJ93GJaK7vk5NebY6IWg4d/mrisZ5XA4o6EXZSOSTbrZEZDn+2Knp9IIad169YYymo6ESr4zFwfxXG516ozYi8ROuWP0ZR+wxgBkm3b2mvryABgye45k/yqX/8Pd7RD/wB03RTOKkog4gQkyhrR9VSpuSVXfAm89Qg4Y+nzdDNoSR8i9xKN/c+rXFMnmuTItwiIqE30Nb58dISt2BEpFzDRh00ae1kOZ3coC0WsqW7hmdk46QvhhEOIYGVYOlUDU/8BownV37alfAiiQV0tjEwX7YMV+6qwraKmdnjOWISk= - file: - - mas-cli.zip - - mas.xcarchive.zip - skip_cleanup: true - on: - repo: mas-cli/mas - tags: true diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 0000000..bf64f88 --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1,17 @@ +# https://yamllint.readthedocs.io/en/stable/configuration.html#default-configuration +--- +extends: default +locale: en_US.UTF-8 + +ignore-from-file: .gitignore + +rules: + line-length: + max: 120 + level: warning + # https://yamllint.readthedocs.io/en/stable/rules.html#module-yamllint.rules.truthy + truthy: + allowed-values: ["true", "false"] + check-keys: false + # Disables fallse positives on GHA workflow `on:` + level: warning diff --git a/Brewfile b/Brewfile index b198231..f39a5c1 100644 --- a/Brewfile +++ b/Brewfile @@ -1,9 +1,12 @@ brew "markdownlint-cli" +brew "mise" +brew "sd" brew "shellcheck" brew "shfmt" brew "swift-format" brew "swiftformat" brew "trash" +brew "yamllint" if OS.mac? && MacOS.version >= :ventura brew "swiftlint" diff --git a/Brewfile.lock.json b/Brewfile.lock.json index 64c9cdf..2f0d391 100644 --- a/Brewfile.lock.json +++ b/Brewfile.lock.json @@ -40,6 +40,94 @@ } } }, + "mise": { + "version": "2024.10.11", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sequoia": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/mise/blobs/sha256:3d1ce9664736b5039466ceeb8286f87150a220d76cf62e5c5538ed4c42c01ff0", + "sha256": "3d1ce9664736b5039466ceeb8286f87150a220d76cf62e5c5538ed4c42c01ff0" + }, + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/mise/blobs/sha256:d28afbc2017aa2d5904da9ca14e1fc9d01d341bfd0adc5168ace961e326b5b1c", + "sha256": "d28afbc2017aa2d5904da9ca14e1fc9d01d341bfd0adc5168ace961e326b5b1c" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/mise/blobs/sha256:c4005d63d073861cef944841aa88925b1b929bc150d94bebe65322a4c7a6886f", + "sha256": "c4005d63d073861cef944841aa88925b1b929bc150d94bebe65322a4c7a6886f" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/mise/blobs/sha256:d392eae34949295556f9c3598ce97bf44f5392b996b02ea31956169332a41f1c", + "sha256": "d392eae34949295556f9c3598ce97bf44f5392b996b02ea31956169332a41f1c" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/mise/blobs/sha256:fd1afe999715d971c78f4bfa90b74fae7b7f8688477b07ea89c67ee36ea8463a", + "sha256": "fd1afe999715d971c78f4bfa90b74fae7b7f8688477b07ea89c67ee36ea8463a" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/mise/blobs/sha256:22601cf4faf8764cf29d6cea72ef0e0789b10da581d899a229aace4e0069b2c4", + "sha256": "22601cf4faf8764cf29d6cea72ef0e0789b10da581d899a229aace4e0069b2c4" + } + } + } + }, + "sd": { + "version": "1.0.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sequoia": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/sd/blobs/sha256:3cf7ab4495f622a4f245bb1c7c30225ef881dc390ee5edc59a1d3c4381cecca1", + "sha256": "3cf7ab4495f622a4f245bb1c7c30225ef881dc390ee5edc59a1d3c4381cecca1" + }, + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/sd/blobs/sha256:6bc773a70934364157591cd888e617601a42ed1f615fda8f77364fa45631d08d", + "sha256": "6bc773a70934364157591cd888e617601a42ed1f615fda8f77364fa45631d08d" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/sd/blobs/sha256:946a44f567e3528d380fbbee742c3abeed9952f53f7de172a846b63d2e21d5b1", + "sha256": "946a44f567e3528d380fbbee742c3abeed9952f53f7de172a846b63d2e21d5b1" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/sd/blobs/sha256:60f079d38aa238a1e7109c6a0f988fe7033449d20f05db3b87219cbfd945fe58", + "sha256": "60f079d38aa238a1e7109c6a0f988fe7033449d20f05db3b87219cbfd945fe58" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/sd/blobs/sha256:f83ebe2505106e8c94c4b92d15c0ac3390dc637039043dbafad3e382fa8c61b0", + "sha256": "f83ebe2505106e8c94c4b92d15c0ac3390dc637039043dbafad3e382fa8c61b0" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/sd/blobs/sha256:0200b81c386198d39ed7b03e85c771e141d9604075d82aa4caed5d5a775486c8", + "sha256": "0200b81c386198d39ed7b03e85c771e141d9604075d82aa4caed5d5a775486c8" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/sd/blobs/sha256:a8fee9e7b0202a27d8dcc599ebd391637107134f139dbe88d6b22c880e63d8a1", + "sha256": "a8fee9e7b0202a27d8dcc599ebd391637107134f139dbe88d6b22c880e63d8a1" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/sd/blobs/sha256:4c098bdfaff013f7a6b6b96a65b9cfef86926e1cd901b363e1bdb84734ee6e3f", + "sha256": "4c098bdfaff013f7a6b6b96a65b9cfef86926e1cd901b363e1bdb84734ee6e3f" + } + } + } + }, "shellcheck": { "version": "0.10.0", "bottle": { @@ -90,50 +178,40 @@ } }, "shfmt": { - "version": "3.9.0", + "version": "3.10.0", "bottle": { "rebuild": 0, "root_url": "https://ghcr.io/v2/homebrew/core", "files": { "arm64_sequoia": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:6b2151cc6266a7c0a21a6ec4edab774168671d81406bd127980dd5b5ebdad9d9", - "sha256": "6b2151cc6266a7c0a21a6ec4edab774168671d81406bd127980dd5b5ebdad9d9" + "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:88d60bca61406671618ecf94f2d81104882f9dd8db838a70d0c2cd6c0fa46863", + "sha256": "88d60bca61406671618ecf94f2d81104882f9dd8db838a70d0c2cd6c0fa46863" }, "arm64_sonoma": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:d15598743aa7c7688b49b4a0df839805f605faaa692def2f36554c26e5136eeb", - "sha256": "d15598743aa7c7688b49b4a0df839805f605faaa692def2f36554c26e5136eeb" + "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:88d60bca61406671618ecf94f2d81104882f9dd8db838a70d0c2cd6c0fa46863", + "sha256": "88d60bca61406671618ecf94f2d81104882f9dd8db838a70d0c2cd6c0fa46863" }, "arm64_ventura": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:d15598743aa7c7688b49b4a0df839805f605faaa692def2f36554c26e5136eeb", - "sha256": "d15598743aa7c7688b49b4a0df839805f605faaa692def2f36554c26e5136eeb" - }, - "arm64_monterey": { - "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:d15598743aa7c7688b49b4a0df839805f605faaa692def2f36554c26e5136eeb", - "sha256": "d15598743aa7c7688b49b4a0df839805f605faaa692def2f36554c26e5136eeb" + "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:88d60bca61406671618ecf94f2d81104882f9dd8db838a70d0c2cd6c0fa46863", + "sha256": "88d60bca61406671618ecf94f2d81104882f9dd8db838a70d0c2cd6c0fa46863" }, "sonoma": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:70107f7fdf986b706bc63652fd16355f426c7789088bfd5beb0fe83fc5069fe7", - "sha256": "70107f7fdf986b706bc63652fd16355f426c7789088bfd5beb0fe83fc5069fe7" + "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:788b7ecff02bbff7fa1563a4937999972799361b4a0c49b1ed8545983d6ff989", + "sha256": "788b7ecff02bbff7fa1563a4937999972799361b4a0c49b1ed8545983d6ff989" }, "ventura": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:70107f7fdf986b706bc63652fd16355f426c7789088bfd5beb0fe83fc5069fe7", - "sha256": "70107f7fdf986b706bc63652fd16355f426c7789088bfd5beb0fe83fc5069fe7" - }, - "monterey": { - "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:70107f7fdf986b706bc63652fd16355f426c7789088bfd5beb0fe83fc5069fe7", - "sha256": "70107f7fdf986b706bc63652fd16355f426c7789088bfd5beb0fe83fc5069fe7" + "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:788b7ecff02bbff7fa1563a4937999972799361b4a0c49b1ed8545983d6ff989", + "sha256": "788b7ecff02bbff7fa1563a4937999972799361b4a0c49b1ed8545983d6ff989" }, "x86_64_linux": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:6f9f1e653f63d0d4c9042b9dca3063074326998b19b5b216478b682bd437ee17", - "sha256": "6f9f1e653f63d0d4c9042b9dca3063074326998b19b5b216478b682bd437ee17" + "url": "https://ghcr.io/v2/homebrew/core/shfmt/blobs/sha256:0b15af30edec238edf607c38a95bd45249cdd6f48f30ab33bdd0a9c2ae2da956", + "sha256": "0b15af30edec238edf607c38a95bd45249cdd6f48f30ab33bdd0a9c2ae2da956" } } } @@ -146,72 +224,72 @@ "files": { "arm64_sequoia": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:87797001883127b2279ca6c852090fd1fe2e268ada680161c1b2d86be113191e", - "sha256": "87797001883127b2279ca6c852090fd1fe2e268ada680161c1b2d86be113191e" + "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:4bee0106201ba2a3036576610e61832b97fb65292c194f52fc15d62e1bdb2243", + "sha256": "4bee0106201ba2a3036576610e61832b97fb65292c194f52fc15d62e1bdb2243" }, "arm64_sonoma": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:38473895d6a806d2ebef3634f0a0f7fe9b10c733a6e538a33d2cd0bbead6bccd", - "sha256": "38473895d6a806d2ebef3634f0a0f7fe9b10c733a6e538a33d2cd0bbead6bccd" + "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:ac50e5269ecc0bffb70a6c5077f97954e2e51c9158a3bfa36b86d89f9d6c5e43", + "sha256": "ac50e5269ecc0bffb70a6c5077f97954e2e51c9158a3bfa36b86d89f9d6c5e43" }, "arm64_ventura": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:0c7accbe185dba810d3fcd3d734705335e733359ccfa7a5d5ae0cbed480ac058", - "sha256": "0c7accbe185dba810d3fcd3d734705335e733359ccfa7a5d5ae0cbed480ac058" + "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:7fb047e8f80a72e5d8d7ae50c496d0cf59dd3ab654ce6048e4b7fa7b85afe69a", + "sha256": "7fb047e8f80a72e5d8d7ae50c496d0cf59dd3ab654ce6048e4b7fa7b85afe69a" }, "sonoma": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:10ebf6d40cc0c2d4d4cb3309e357e1b6a8d8b5991b5d30c479f3e81587e0c6cd", - "sha256": "10ebf6d40cc0c2d4d4cb3309e357e1b6a8d8b5991b5d30c479f3e81587e0c6cd" + "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:a99a19c9fc177a57b2577e3c1b30feb70f13388fc9c4e4ea7968f783058e09a0", + "sha256": "a99a19c9fc177a57b2577e3c1b30feb70f13388fc9c4e4ea7968f783058e09a0" }, "ventura": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:b12bf9258d6b73fd87d356978e93fa363b4239b50a37c8c2f16b313ad53c5364", - "sha256": "b12bf9258d6b73fd87d356978e93fa363b4239b50a37c8c2f16b313ad53c5364" + "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:a652f68cc4bed9c3186b66c8ee68e79b7387d37943aaff0a0c2d4197367b73fe", + "sha256": "a652f68cc4bed9c3186b66c8ee68e79b7387d37943aaff0a0c2d4197367b73fe" }, "x86_64_linux": { - "cellar": "/home/linuxbrew/.linuxbrew/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:b350f38deae722dfb00b33610c82d17d6dcd0db3109f171adb56a3fafe0545a0", - "sha256": "b350f38deae722dfb00b33610c82d17d6dcd0db3109f171adb56a3fafe0545a0" + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/swift-format/blobs/sha256:b1949fcb7f1b943fa5b0216bc6f18e12dc369c0538b093786332f851f22b0b03", + "sha256": "b1949fcb7f1b943fa5b0216bc6f18e12dc369c0538b093786332f851f22b0b03" } } } }, "swiftformat": { - "version": "0.54.6", + "version": "0.54.6_1", "bottle": { "rebuild": 0, "root_url": "https://ghcr.io/v2/homebrew/core", "files": { "arm64_sequoia": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fda0a46091e8c4a1a913e08e29a92159ed747d83403508e0b5408e88e68cdf0c", - "sha256": "fda0a46091e8c4a1a913e08e29a92159ed747d83403508e0b5408e88e68cdf0c" + "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:03eb08eb7de0e697e574b5d5c94104a88c9548ee880b942f1916536fe7ff897a", + "sha256": "03eb08eb7de0e697e574b5d5c94104a88c9548ee880b942f1916536fe7ff897a" }, "arm64_sonoma": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2c937e3425e9b44a73eb5ae4a83604b4476f901866014c01c1ebd3f3a8d9c198", - "sha256": "2c937e3425e9b44a73eb5ae4a83604b4476f901866014c01c1ebd3f3a8d9c198" + "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:0ff9c3c154fea61303bd060da1aecebb025a3a33460b24910cf55e6ae366574e", + "sha256": "0ff9c3c154fea61303bd060da1aecebb025a3a33460b24910cf55e6ae366574e" }, "arm64_ventura": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:d68be9490bce8cb196933f1f421f791b0b9758a759956edfaf166f88dfca78e1", - "sha256": "d68be9490bce8cb196933f1f421f791b0b9758a759956edfaf166f88dfca78e1" + "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:52200577da57cebd27e7d4b6a9ed84f6d3475b7f91e28ec4f5947fc2992cd943", + "sha256": "52200577da57cebd27e7d4b6a9ed84f6d3475b7f91e28ec4f5947fc2992cd943" }, "sonoma": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:784d61fca33bdbbdf96f8f23db2a0ea849ef62cb251eedfe83863869db84359b", - "sha256": "784d61fca33bdbbdf96f8f23db2a0ea849ef62cb251eedfe83863869db84359b" + "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:9f79e28a0a5c7172be8bfcf23fca47de08f8bc03a3ddcdfbf52704445b9d8b18", + "sha256": "9f79e28a0a5c7172be8bfcf23fca47de08f8bc03a3ddcdfbf52704445b9d8b18" }, "ventura": { "cellar": ":any_skip_relocation", - "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:7845bd9bf8f0f94980f38d0ac322a5ee41bde07d18ec0c93a343c4aa7d2606fe", - "sha256": "7845bd9bf8f0f94980f38d0ac322a5ee41bde07d18ec0c93a343c4aa7d2606fe" + "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:416528899d45dc25edc2f14c857239a2c922b4be548345423857f140c6b90f0f", + "sha256": "416528899d45dc25edc2f14c857239a2c922b4be548345423857f140c6b90f0f" }, "x86_64_linux": { - "cellar": "/home/linuxbrew/.linuxbrew/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:14756d1f83aedf183be980541393c3e4d9cfa47dee3dbfdb665a3461f5045e13", - "sha256": "14756d1f83aedf183be980541393c3e4d9cfa47dee3dbfdb665a3461f5045e13" + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:86c47e1a74da98ff5646c8d510ea5e6de45e9dc97bc59f151bd2a8848b5bc9f8", + "sha256": "86c47e1a74da98ff5646c8d510ea5e6de45e9dc97bc59f151bd2a8848b5bc9f8" } } } @@ -284,18 +362,44 @@ } } } - } - }, - "tap": { - "peripheryapp/periphery": { - "revision": "e3f6467b552f08e874875bfbc7703cb917085e0e" - } - }, - "cask": { - "periphery": { - "version": "2.9.0", - "options": { - "full_name": "periphery" + }, + "yamllint": { + "version": "1.35.1", + "bottle": { + "rebuild": 2, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sequoia": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:cb74d6cc51501733531acd25b26fd474557d19374b98eb7de16271ff2c257860", + "sha256": "cb74d6cc51501733531acd25b26fd474557d19374b98eb7de16271ff2c257860" + }, + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:e36b43d6b87028fe2005878cb15c78edec6ddb898e9a86ff7b901fe093cf9c0e", + "sha256": "e36b43d6b87028fe2005878cb15c78edec6ddb898e9a86ff7b901fe093cf9c0e" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:3591f98aaaebba5e9360926f5ca756dbd85c6a46de0554042376ac83548c7fb3", + "sha256": "3591f98aaaebba5e9360926f5ca756dbd85c6a46de0554042376ac83548c7fb3" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:3889369233f5f342b73cc70625748a52d72117603b92f352af00a9ebd27cb1c4", + "sha256": "3889369233f5f342b73cc70625748a52d72117603b92f352af00a9ebd27cb1c4" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:209883378df0edf4a0691fd2dbf6f2e8da7776bd9c0de0fc70fa04dd0fc51c8d", + "sha256": "209883378df0edf4a0691fd2dbf6f2e8da7776bd9c0de0fc70fa04dd0fc51c8d" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:993514320174f1147d538719552131a73d34cf66dc9f82c38f6ed28b16cea287", + "sha256": "993514320174f1147d538719552131a73d34cf66dc9f82c38f6ed28b16cea287" + } + } } } } @@ -303,20 +407,12 @@ "system": { "macos": { "monterey": { - "HOMEBREW_VERSION": "4.4.1-17-gf957e0e", + "HOMEBREW_VERSION": "4.4.2-62-g59d56f8", "HOMEBREW_PREFIX": "/usr/local", "Homebrew/homebrew-core": "api", "CLT": "14.2.0.0.1.1668646533", "Xcode": "14.2", "macOS": "12.7.6" - }, - "ventura": { - "HOMEBREW_VERSION": "3.6.2-17-g0b602f6", - "HOMEBREW_PREFIX": "/opt/homebrew", - "Homebrew/homebrew-core": "9f43be0861992b9109035ac00e999f66598ba6c2", - "CLT": "14.0.0.0.1.1661618636", - "Xcode": "14.0", - "macOS": "13.0" } } } diff --git a/Homebrew/mas-tap.rb b/Homebrew/mas-tap.rb index 664ca9d..4195b6d 100644 --- a/Homebrew/mas-tap.rb +++ b/Homebrew/mas-tap.rb @@ -1,35 +1,44 @@ +# typed: strict +# frozen_string_literal: true + +# mas command formula for custom tap (mas-cli/homebrew-tap). class Mas < Formula desc "Mac App Store command-line interface" homepage "https://github.com/mas-cli/mas" url "https://github.com/mas-cli/mas.git", - tag: "v1.8.5", - revision: "9da3c3a1f72271e022f02897ed587f2ce1fcddf3" + tag: "v1.8.7-beta.1", + revision: "f8be3e9aaa6c78490277976f17041f2577f5dc21" license "MIT" head "https://github.com/mas-cli/mas.git", branch: "main" bottle do - root_url "https://github.com/mas-cli/mas/releases/download/v1.8.5" - sha256 cellar: :any_skip_relocation, arm64_monterey: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" - sha256 cellar: :any_skip_relocation, arm64_big_sur: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" - sha256 cellar: :any_skip_relocation, monterey: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" - sha256 cellar: :any_skip_relocation, big_sur: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" - sha256 cellar: :any_skip_relocation, catalina: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" - sha256 cellar: :any_skip_relocation, mojave: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" - sha256 cellar: :any_skip_relocation, high_sierra: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" - sha256 cellar: :any_skip_relocation, sierra: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" - sha256 cellar: :any_skip_relocation, el_capitan: "2bf14f3f6cd15b18fe3c96585ceea2d2e538bf1c0c384aba4cd0ac78c19ea287" + root_url "https://github.com/mas-cli/mas/releases/download/v1.8.7-beta.1" + sha256 cellar: :any_skip_relocation, arm64_sonoma: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, arm64_ventura: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, arm64_monterey: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, arm64_big_sur: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, sonoma: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, ventura: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, monterey: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, big_sur: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, catalina: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, mojave: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, high_sierra: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, sierra: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" + sha256 cellar: :any_skip_relocation, el_capitan: "0d042a450d2623e3ea40db0b645454ee88d1a1763a7aa778eec5beea619b9a60" end depends_on :macos - if Hardware::CPU.arm? + on_arm do depends_on xcode: ["12.2", :build] - else + end + on_intel do depends_on xcode: ["12.0", :build] end def install - system "script/build", "--universal" - system "script/install", "--universal", prefix + system "script/build" + system "script/install", prefix bash_completion.install "contrib/completion/mas-completion.bash" => "mas" fish_completion.install "contrib/completion/mas.fish" diff --git a/Homebrew/mas.rb b/Homebrew/mas.rb index 7836b2c..050648f 100644 --- a/Homebrew/mas.rb +++ b/Homebrew/mas.rb @@ -1,24 +1,33 @@ +# typed: strict +# frozen_string_literal: true + +# mas command formula for homebrew-core tap. class Mas < Formula desc "Mac App Store command-line interface" homepage "https://github.com/mas-cli/mas" url "https://github.com/mas-cli/mas.git", - tag: "v1.8.5", - revision: "9da3c3a1f72271e022f02897ed587f2ce1fcddf3" + tag: "v1.8.7-beta.1", + revision: "f8be3e9aaa6c78490277976f17041f2577f5dc21" license "MIT" head "https://github.com/mas-cli/mas.git", branch: "main" bottle do - sha256 cellar: :any_skip_relocation, arm64_monterey: "433b94f32da9835c0800975a5f8db08c823c4b8c35077db7e2a9763d700f0fbe" - sha256 cellar: :any_skip_relocation, arm64_big_sur: "446af97db6bcb0f44d61e7486d7c74d14325002ff9918dba7a7db3045bf8b07c" - sha256 cellar: :any_skip_relocation, monterey: "62f08836f3ff705e8b7dd858a5225a0b0bceb39d6bb2340ee469e68ead73a90b" - sha256 cellar: :any_skip_relocation, big_sur: "18fd65b45ff112ca5c80a31202688617a22dec56b28bbb93cf4bdb6ed2d73d56" - sha256 cellar: :any_skip_relocation, catalina: "29d2d552d09ef893c3560d94a01c2985bb53b2e9499400987ad76c9b50b9f0f9" + sha256 cellar: :any_skip_relocation, arm64_sonoma: "7b11bfefcb43e9a423ff301f7bbc29b0fb86044bf93442f243c5a8a67d8d4869" + sha256 cellar: :any_skip_relocation, arm64_ventura: "e49511dd1283813c4420aec9fc3b3167d18f9fdbb51d82b1e479b628d5312342" + sha256 cellar: :any_skip_relocation, arm64_monterey: "379d46e2657be295321f1603dc1df28130ea0b5b264ceb192a9ba488d77c7a98" + sha256 cellar: :any_skip_relocation, arm64_big_sur: "918a1484de106940f7bebc936e1ded87d7b65652054b09204887ad0651937ec4" + sha256 cellar: :any_skip_relocation, sonoma: "24e3057991ea1eed52eb4a27c0f17d794106770621e5a8bb975477dae135b82d" + sha256 cellar: :any_skip_relocation, ventura: "6ef7788e28c46cdc0f916812f49dfeb1fabf2240a8c36f33ce34bcfb9df1502f" + sha256 cellar: :any_skip_relocation, monterey: "6b313f2f66d028cb7782c108d6e502ce73ccb9c08fac3bece0b057fcce5c4689" + sha256 cellar: :any_skip_relocation, big_sur: "50b50f51219143fcb69c730b52b74011a76104f66348ea727d0200f7b375ae25" + sha256 cellar: :any_skip_relocation, catalina: "d241d3b9156b033f3d2c31684a44de726297e07fd9bd5e3ccc4c36e4f1c3baf3" end depends_on :macos - if Hardware::CPU.arm? + on_arm do depends_on xcode: ["12.2", :build] - else + end + on_intel do depends_on xcode: ["12.0", :build] end diff --git a/Makefile b/Makefile index ec483e0..fabe1b4 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ CMD_NAME = mas SHELL = /bin/sh -PREFIX ?= /usr/local +PREFIX ?= $(shell brew --prefix) SWIFT_VERSION = 5.7.1 @@ -44,7 +44,7 @@ help: ## (default) Displays this message ################################################################################ # -# Targets +# โ„น๏ธ Info Targets # .PHONY: version @@ -59,17 +59,35 @@ init: ## Installs tools. - swiftenv install $(SWIFT_VERSION) swiftenv local $(SWIFT_VERSION) +################################################################################ +# +# ๐Ÿ‘ข Bootstrap +# + .PHONY: bootstrap bootstrap: ## Installs tools. + script/bootstrap -f + +.PHONY: bootstrap-update +bootstrap-update: ## Upgrades and installs tools. script/bootstrap +################################################################################ +# +# ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Development Targets +# + .PHONY: clean clean: ## Cleans built products. script/clean -.PHONY: updateHeaders -updateHeaders: ## Updates private headers. - script/update_headers +.PHONY: lint +lint: ## Lints source code. + script/lint + +.PHONY: format +format: ## Formats source code. + script/format .PHONY: build build: ## Builds the project. @@ -84,41 +102,14 @@ test: build ## Runs tests. run: build ${EXECUTABLE_DIRECTORY}/${CMD_NAME} $(ARGS) -.PHONY: install -install: ## Installs the project. - script/install $(PREFIX) +.PHONY: update-headers +update-headers: ## Updates private macOS headers. + script/update_headers -.PHONY: uninstall -uninstall: ## Uninstalls the project. - script/uninstall - -.PHONY: format -format: ## Formats source code. - script/format - -.PHONY: lint -lint: ## Lints source code. - script/lint - -.PHONY: danger -danger: ## Runs danger. - script/danger - -# Builds bottles -.PHONY: bottles -bottles: ## Builds bottles. - script/bottle - -.PHONY: bottle -bottle: bottles ## Alias for bottles - -.PHONY: package -package: build ## Packages the project. - script/package - -.PHONY: packageInstall -packageInstall: package ## Installs the package. - script/package_install +################################################################################ +# +# ๐Ÿ•Š๏ธ Swift Package Targets +# .PHONY: describe describe: ## Describes the Swift package. @@ -135,3 +126,44 @@ dependencies: resolve ## Lists SwiftPM dependencies. .PHONY: update update: resolve ## Updates SwiftPM dependencies. swift package update + +################################################################################ +# +# ๐Ÿš€ Release Targets +# + +.PHONY: build-universal +build-universal: ## Builds a "fat" universal binary. + script/build --universal + +.PHONY: install +install: build ## Installs the binary. + script/install $(PREFIX) + +.PHONY: install-universal +install-universal: build-universal ## Installs a universal binary. + script/install --universal + +.PHONY: uninstall +uninstall: ## Uninstalls the binary. + script/uninstall + +.PHONY: package +package: build ## Packages the project. + script/package + +.PHONY: package-install +package-install: package ## Installs the package. + script/package_install + +.PHONY: bottle +bottle: ## Builds Homebrew bottles. + script/bottle + +.PHONY: brew_formula_update +brew_formula_update: ## Updates homebrew-core formula. + script/brew_formula_update + +.PHONY: brew_release_validate +brew_release_validate: ## Builds Homebrew bottle for the current system. + script/brew_release_validate diff --git a/Tests/masTests/.swiftlint.yml b/Tests/masTests/.swiftlint.yml index df984c3..dc0cbcd 100644 --- a/Tests/masTests/.swiftlint.yml +++ b/Tests/masTests/.swiftlint.yml @@ -4,9 +4,10 @@ # # https://github.com/realm/SwiftLint#configuration # + --- disabled_rules: -- force_cast -- force_try -- implicitly_unwrapped_optional -- no_magic_numbers + - force_cast + - force_try + - implicitly_unwrapped_optional + - no_magic_numbers diff --git a/script/bootstrap b/script/bootstrap index 09c06ac..8af2285 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -13,10 +13,43 @@ if ! cd -- "${mas_dir}"; then exit 1 fi +function usage { + echo "Usage: bootstrap [-f]" + echo " -f option enables frozen mode" + exit 1 +} + +frozen='' + +# Detect presence of `-f` frozen option +while getopts "f" opt; do + case "${opt}" in + f) + frozen='-f' + ;; + *) + usage 1>&2 + ;; + esac +done + script/clean printf $'==> ๐Ÿ‘ข Bootstrapping (%s)\n' "$(script/version)" # Install Homebrew tools -rm -f Brewfile.lock.json -brew bundle install --no-upgrade --verbose +if [[ "${frozen}" == "-f" ]]; then + # --no-lock Don't touch Brewfile.lock.json + brew bundle install --no-lock --no-upgrade --verbose +else + # Allow upgrades + rm -f Brewfile.lock.json + brew bundle install --verbose +fi + +if [[ ! -x "$(command -v mise)" ]]; then + brew install mise +fi +mise settings set experimental true +mise install --verbose +mise list --verbose diff --git a/script/bottle b/script/bottle index f4cb48c..e4c7bb0 100755 --- a/script/bottle +++ b/script/bottle @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash -ex # # script/bottle # mas @@ -6,101 +6,130 @@ # Builds bottles of mas Homebrew formula for custom tap: # https://github.com/mas-cli/homebrew-tap # +# This script should be run _after_ the formula has been updated in Homebrew +# ################################################################################ # # Variables # -BUILD_DIR="$PWD/.build" -BOTTLE_DIR="$BUILD_DIR/bottles" -VERSION=$(script/version) -ROOT_URL="https://github.com/mas-cli/mas/releases/download/v${VERSION}" +BUILD_DIR="${PWD}/.build" +BOTTLE_DIR="${BUILD_DIR}/bottles" +CORE_TAP_PATH="$(brew --repository homebrew/core)" +MAS_VERSION=$(script/version) +ROOT_URL="https://github.com/mas-cli/mas/releases/download/v${MAS_VERSION}" # Supports macOS 10.13 and later -OS_NAMES=(arm64_monterey monterey arm64_big_sur big_sur catalina mojave high_sierra) +OS_NAMES=( + sequoia + arm64_sequoia + sonoma + arm64_sonoma + ventura + arm64_ventura + monterey + arm64_monterey + big_sur + arm64_big_sur + catalina + mojave + high_sierra + sierra + el_capitan +) -# Semantic version number split into a list using Ugly, bash 3 compatible syntax -IFS=" " read -r -a CURRENT_OS_VERSION <<<"$(sw_vers -productVersion | sed 's/\./ /g'))" +# Semantic version number split into a list using ugly, bash 3 compatible syntax +IFS=" " read -r -a CURRENT_OS_VERSION <<<"$(sw_vers -productVersion | sed 's/\./ /g')" CURRENT_OS_VERSION_MAJOR=${CURRENT_OS_VERSION[0]} CURRENT_OS_VERSION_MINOR=${CURRENT_OS_VERSION[1]} -echo "CURRENT_OS_VERSION_MAJOR: $CURRENT_OS_VERSION_MAJOR" -echo "CURRENT_OS_VERSION_MINOR: $CURRENT_OS_VERSION_MINOR" +echo "CURRENT_OS_VERSION_MAJOR: ${CURRENT_OS_VERSION_MAJOR}" +echo "CURRENT_OS_VERSION_MINOR: ${CURRENT_OS_VERSION_MINOR}" -if [[ ${CURRENT_OS_VERSION_MAJOR} == "12" ]]; then - if [[ "x86_64" == "$(uname -m)" ]]; then +case "${CURRENT_OS_VERSION_MAJOR}" in + 15) + CURRENT_PLATFORM=sequoia + ;; + 14) + CURRENT_PLATFORM=sonoma + ;; + 13) + CURRENT_PLATFORM=ventura + ;; + 12) CURRENT_PLATFORM=monterey - else - CURRENT_PLATFORM=arm64_monterey - fi -elif [[ ${CURRENT_OS_VERSION_MAJOR} == "11" ]]; then - # Big Sur - if [[ "x86_64" == "$(uname -m)" ]]; then + ;; + 11) CURRENT_PLATFORM=big_sur - else - CURRENT_PLATFORM=arm64_big_sur - fi -elif [[ ${CURRENT_OS_VERSION_MAJOR} == "10" && ${CURRENT_OS_VERSION_MINOR} == "15" ]]; then - CURRENT_PLATFORM=catalina -else - echo "Unsupported macOS version. This script requires Catalina or better." - exit 1 + ;; + 10) + CURRENT_PLATFORM=catalina + ;; + *) + echo "Unsupported macOS version. This script requires Catalina or better." + exit 1 + ;; +esac + +# Prefix platform with architecture +if [[ "arm64" == "$(uname -m)" ]]; then + CURRENT_PLATFORM="arm64_${CURRENT_PLATFORM}" fi echo "CURRENT_PLATFORM: ${CURRENT_PLATFORM}" # Output filename from build-bottle command -OLD_FILENAME="mas--${VERSION}.${CURRENT_PLATFORM}.bottle.tar.gz" +OLD_FILENAME="mas--${MAS_VERSION}.${CURRENT_PLATFORM}.bottle.tar.gz" ################################################################################ # # Preflight checks # -# Uninstall if necessary -brew remove mas 2>/dev/null || true # ignore failure -brew remove mas-cli/tap/mas 2>/dev/null || true #ignore failure +# # Uninstall if necessary +# brew remove mas 2>/dev/null || true +# brew remove mas-cli/tap/mas 2>/dev/null || true -# Uninstall if still found on path -if command -v mas >/dev/null; then - script/uninstall || true # ignore failure -fi +# # Uninstall if still found on path +# if command -v mas >/dev/null; then +# script/uninstall || true +# fi # Use formula from custom tap -brew tap mas-cli/tap -brew update +# brew tap mas-cli/tap +# brew update # Audit formula -brew audit --strict mas-cli/tap/mas -brew style mas-cli/tap/mas +brew audit --strict --verbose --formula --tap mas-cli/tap mas +brew style Homebrew/mas-tap.rb ################################################################################ # # Build the formula for the current macOS version and architecture. # -echo "==> ๐Ÿผ Bottling mas ${VERSION} for: ${OS_NAMES[*]}" +echo "==> ๐Ÿผ Bottling mas ${MAS_VERSION} for: ${OS_NAMES[*]}" brew install --build-bottle mas-cli/tap/mas # Generate bottle do block, dropping last 2 lines -brew bottle --verbose --no-rebuild --root-url="$ROOT_URL" mas-cli/tap/mas +brew bottle --verbose --no-rebuild --root-url="${ROOT_URL}" mas-cli/tap/mas if ! test -e "${OLD_FILENAME}"; then echo "Bottle not found: ${OLD_FILENAME}" echo "If an old version is showing in the log and filename, then make sure the formula has been updated in:" - echo "/Library/Taps/homebrew/homebrew-core" + echo "${CORE_TAP_PATH}" exit 1 fi SHA256=$(shasum --algorithm 256 "${OLD_FILENAME}" | cut -f 1 -d ' ' -) -mkdir -p "$BOTTLE_DIR" +mkdir -p "${BOTTLE_DIR}" # Start of bottle block BOTTLE_BLOCK=$( cat <<-EOF bottle do - root_url "$ROOT_URL" + root_url "${ROOT_URL}" EOF ) @@ -111,15 +140,15 @@ EOF # Fix filename for os in "${OS_NAMES[@]}"; do - new_filename="mas-${VERSION}.${os}.bottle.tar.gz" + new_filename="mas-${MAS_VERSION}.${os}.bottle.tar.gz" cp -v "${OLD_FILENAME}" "${BOTTLE_DIR}/${new_filename}" # Append each os # BOTTLE_BLOCK="$(printf "${BOTTLE_BLOCK}\n sha256 cellar: :any_skip_relocation, %-15s %s" "${os}:" "${SHA256}")" - BOTTLE_BLOCK="$BOTTLE_BLOCK"$( + BOTTLE_BLOCK="${BOTTLE_BLOCK}"$( cat <<-EOF - sha256 cellar: :any_skip_relocation, $os: "$SHA256" + sha256 cellar: :any_skip_relocation, ${os}: "${SHA256}" EOF ) done @@ -135,7 +164,3 @@ EOF rm "${OLD_FILENAME}" ls -l "${BOTTLE_DIR}" echo "${BOTTLE_BLOCK}" - -brew remove mas-cli/tap/mas - -open "${BOTTLE_DIR}" diff --git a/script/brew_build_interactive b/script/brew_build_interactive new file mode 100755 index 0000000..654bb49 --- /dev/null +++ b/script/brew_build_interactive @@ -0,0 +1,11 @@ +#!/bin/bash -e +# +# script/brew_build_interactive +# mas +# +# https://docs.brew.sh/Formula-Cookbook#check-the-build-system +# + +HOMEBREW_NO_INSTALL_FROM_API=1 \ + brew reinstall \ + --interactive mas diff --git a/script/brew_core_update b/script/brew_core_update new file mode 100755 index 0000000..af8f46e --- /dev/null +++ b/script/brew_core_update @@ -0,0 +1,169 @@ +#!/bin/bash -ex +# +# script/brew_core_update +# mas +# +# Updates mas Homebrew core formula: +# https://github.com/Homebrew/homebrew-core/blob/master/Formula/mas.rb +# +# brew bump-formula-pr --help +# + +CORE_TAP_PATH="$(brew --repository homebrew/core)" +CORE_MAS_FORMULA_FILE="${CORE_TAP_PATH}/Formula/m/mas.rb" + +PROJECT_PATH="$(git rev-parse --show-toplevel)" +LOCAL_MAS_FORMULA_PATH="${PROJECT_PATH}/Homebrew/mas.rb" + +function usage { + echo "Usage: brew_core_update [-d] v0.0 [sha1_hash]" + echo " -d option enables dry run mode" + echo " version will be inferred using version script if not provided" + echo " sha will be inferred from the current commit if not provided" + exit 1 +} + +# Max 3 arguments +if [[ $# -gt 3 ]]; then + usage 1>&2 +fi + +echo='' +dry_run='' + +# Detect presence of `-d` dry run option +while getopts "d" o; do + case "${o}" in + d) + echo='echo (DRY-RUN):' + dry_run='-d' + ;; + *) + usage 1>&2 + ;; + esac +done +shift $((OPTIND - 1)) + +# DRY_RUN environment variable +# shellcheck disable=SC2153 +if [[ $DRY_RUN == 'true' ]]; then + echo='echo (DRY-RUN):' + dry_run='-d' +fi + +# arg 1 - version tag +if [[ -n "${1}" ]]; then + MAS_VERSION="${1}" +else + MAS_VERSION="v$(script/version)" +fi + +echo "MAS_VERSION: ${MAS_VERSION}" + +# arg 2 - revision (commit hash) +if [[ -n "${2}" ]]; then + REVISION="${2}" +else + # Derive revision from version. Fails if MAS_VERSION is not a tag. + REVISION=$(git rev-parse "${MAS_VERSION}") +fi + +echo "REVISION: ${REVISION}" + +################################################################################ +# +# Preflight checks +# + +# Uninstall if necessary +brew remove mas 2>/dev/null || true +brew remove mas-cli/tap/mas 2>/dev/null || true + +# Uninstall if still found on path +if command -v mas >/dev/null; then + script/uninstall || true +fi + +# Ensure core is tapped +if ! [[ -d "${CORE_TAP_PATH}" ]]; then + brew tap homebrew/core +fi + +brew update + +################################################################################ +# +# Build the formula for the current macOS version and architecture. +# + +# Update mas formula in core (temporary) +cp -v "${LOCAL_MAS_FORMULA_PATH}" "${CORE_MAS_FORMULA_FILE}" + +# Install mas from source +# HOMEBREW_NO_INSTALL_FROM_API: +# Force brew to use the local repository instead of the API. +# Disable API before any install, reinstall or upgrade commands. + +HOMEBREW_NO_INSTALL_FROM_API=1 \ + brew install mas \ + --build-from-source \ + --verbose + +# Audit formula +brew audit --strict mas +brew style mas + +# Revert core formula change after testing +pushd "${CORE_TAP_PATH}" +git diff +git checkout . +popd + +################################################################################ +# +# Update Homebrew +# + +# echo "Checking to see if this update can be a simple bump." +# diff "${LOCAL_MAS_FORMULA_PATH}" "${CORE_MAS_FORMULA_FILE}" + +echo "==> ๐Ÿงช Updating homebrew-core formula mas (${MAS_VERSION}, ${REVISION})" + +echo "Validating formula" +brew bump-formula-pr \ + --tag="${MAS_VERSION}" \ + --revision="${REVISION}" \ + --strict \ + --verbose \ + --no-browse \ + --fork-org mas-cli \ + --dry-run \ + mas + +# brew exit status +status=$? +if [[ ${status} -ne 0 ]]; then + echo "Formula did not validate using 'brew bump-formula-pr'" + exit ${status} +fi + +if [[ $dry_run == '-d' ]]; then + exit 0 +fi + +pushd "${CORE_TAP_PATH}" + +echo "Updating homebrew/core formula with a PR" + +$echo brew bump-formula-pr \ + --tag="${MAS_VERSION}" \ + --revision="${REVISION}" \ + --strict \ + --verbose \ + --online \ + --no-browse \ + --fork-org mas-cli \ + mas + +popd diff --git a/script/brew_formula_update b/script/brew_formula_update deleted file mode 100755 index 4327406..0000000 --- a/script/brew_formula_update +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -e -# -# script/brew_formula_update -# mas -# -# Updates mas Homebrew core formula: -# https://github.com/Homebrew/homebrew-core/blob/master/Formula/mas.rb -# -# brew bump-formula-pr --help -# - -BREW_CORE_PATH="$(brew --prefix)/Library/Taps/homebrew/homebrew-core/Formula" - -function usage { - echo "Usage: brew_formula_bump [v1.0] [sha1_hash]" - echo "- version will be inferred using version script if not provided" - echo "- sha will be inferred from the current commit if not provided" - exit 1 -} - -# arg 1 - version tag -if test -n "$1"; then - VERSION="$1" -else - VERSION="v$(script/version)" -fi - -# arg 2 - revision (commit hash) -if test -n "$2"; then - REVISION="$2" -else - REVISION=$(git rev-parse "$VERSION") -fi - -echo "Checking to see if this update can be a simple bump." -diff "Homebrew/mas.rb" "$BREW_CORE_PATH/mas.rb" - -# diff exit status -status=$? -formula_revisions=0 -if test $status -ne 0; then - echo "There are changes in the local formula (Homebrew/mas.rb) that haven't been released yet." - #exit $status - formula_revisions=1 -fi - -echo "==> ๐Ÿงช Updating homebrew-core formula mas ($VERSION, $REVISION)" - -echo "Validating formula" -brew bump-formula-pr \ - --tag="$VERSION" \ - --revision="$REVISION" \ - --strict \ - mas - -# brew exit status -status=$? -if test $status -ne 0; then - echo "Formula did not validate using 'brew bump-formula-pr'" - exit $status -fi - -pushd "$BREW_CORE_PATH" || exit 2 - -echo "Updating formula" -if test $formula_revisions -eq 1; then - # Options to - dry_run="--dry-run --write" -fi - -brew bump-formula-pr \ - --tag="$VERSION" \ - --revision="$REVISION" \ - --strict \ - --verbose \ - "$dry_run" \ - mas diff --git a/script/brew_tap_update b/script/brew_tap_update new file mode 100755 index 0000000..6dd7a88 --- /dev/null +++ b/script/brew_tap_update @@ -0,0 +1,43 @@ +#!/bin/bash -ex +# +# script/brew_tap_update +# mas +# +# Updates mas custom tap formula: +# https://github.com/mas-cli/homebrew-tap/blob/main/Formula/mas.rb +# + +function usage { + echo "Usage: brew_tap_update [-d] v0.0 [sha1_hash]" + echo " -d option enables dry run mode" + echo " version will be inferred using version script if not provided" + echo " sha will be inferred from the current commit if not provided" + exit 1 +} + +# Max 3 arguments +if [[ $# -gt 3 ]]; then + usage 1>&2 +fi + +# arg 1 - version tag +if [[ -n "${1}" ]]; then + MAS_VERSION="${1}" +else + MAS_VERSION="v$(script/version)" +fi + +echo "MAS_VERSION: ${MAS_VERSION}" + +# arg 2 - revision (commit hash) +if [[ -n "${2}" ]]; then + REVISION="${2}" +else + # Derive revision from version. Fails if MAS_VERSION is not a tag. + REVISION=$(git rev-parse "${MAS_VERSION}") +fi + +echo "REVISION: ${REVISION}" + +# Build in mas project +script/bottle diff --git a/script/brew_update b/script/brew_update deleted file mode 100755 index 02f2d46..0000000 --- a/script/brew_update +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -e -# -# script/build_artifacts -# mas -# -# Runs all related scripts for generating all artifacts. -# - -VERSION=$(script/version) - -echo "Updating mas $VERSION Homebrew formula" - -script/brew_formula_update -script/bottle diff --git a/script/build b/script/build index 44f3db0..fd84a9a 100755 --- a/script/build +++ b/script/build @@ -15,8 +15,11 @@ fi # Build for the host architecture by default. ARCH=() -if [[ "${#}" -gt 1 && "${1}" == '--universal' ]]; then - ARCH=(--arch arm64 --arch x86_64) +if [[ "${#}" -ge 1 && "${1}" == '--universal' ]]; then + ARCH=( + --arch arm64 + --arch x86_64 + ) fi # Disable the manifest cache on Xcode 12.5 and later. @@ -25,7 +28,7 @@ if [[ "$(swift build --help)" =~ manifest-cache ]]; then CACHE=(--manifest-cache none) fi -echo "==> ๐Ÿ—๏ธ Building mas ($(script/version))" +echo "==> ๐Ÿ—๏ธ Building mas ($(script/version --write))" swift build \ --configuration release \ "${ARCH[@]+"${ARCH[@]}"}" \ diff --git a/script/build_artifacts b/script/build_artifacts index 30d384b..6414d16 100755 --- a/script/build_artifacts +++ b/script/build_artifacts @@ -6,9 +6,9 @@ # Runs all related scripts for generating all artifacts. # -VERSION=$(script/version) +MAS_VERSION=$(script/version) -echo "Building mas $VERSION artifacts" +echo "Building mas $MAS_VERSION artifacts" script/clean script/build --universal diff --git a/script/format b/script/format index 9091140..b942cb2 100755 --- a/script/format +++ b/script/format @@ -19,7 +19,7 @@ fi printf $'==> ๐Ÿšจ Formatting mas\n' -for LINTER in markdownlint shfmt swift-format swiftformat swiftlint; do +for LINTER in markdownlint prettier shfmt swift-format swiftformat swiftlint yamllint; do if [[ ! -x "$(command -v ${LINTER})" ]]; then printf $'error: %s is not installed. Run \'script/bootstrap\' or \'brew install %s\'.\n' "${LINTER}" "${LINTER}" exit 1 @@ -45,3 +45,7 @@ shfmt \ printf -- $'--> ใ€ฝ๏ธ Markdown\n' markdownlint --config .markdownlint.json --fix .github . + +printf -- $'--> ๐Ÿ–Š YAML\n' +# shellcheck disable=SC2046 +prettier --write $(yamllint --list-files .) diff --git a/script/install b/script/install index 1b72f39..c771518 100755 --- a/script/install +++ b/script/install @@ -12,13 +12,8 @@ ARCH=$(uname -m) RELEASE=.build/${ARCH}-apple-macosx/release -VERSION=$(script/version) - -if [[ $(uname -m) == 'arm64' ]]; then - PREFIX=/opt/homebrew -else - PREFIX=/usr/local -fi +MAS_VERSION=$(script/version) +PREFIX=/usr/local while test -n "$1"; do if [[ "$1" == '--universal' ]]; then @@ -32,7 +27,7 @@ while test -n "$1"; do shift done -echo "==> ๐Ÿ“ฒ Installing mas ($VERSION) for $ARCH to $PREFIX" +echo "==> ๐Ÿ“ฒ Installing mas ($MAS_VERSION) for $ARCH to $PREFIX" ditto -v \ "$RELEASE/mas" \ - "$PREFIX/bin/" + "$PREFIX/bin/mas" diff --git a/script/lint b/script/lint index 58de5aa..d655a52 100755 --- a/script/lint +++ b/script/lint @@ -19,9 +19,9 @@ if ! cd -- "${mas_dir}"; then exit 1 fi -printf $'==> ๐Ÿšจ Linting mas (%s)\n' "$(script/version)" +printf $'==> ๐Ÿšจ Linting mas (%s)\n' "$(script/version --write)" -for linter in git markdownlint periphery shellcheck shfmt swift-format swiftformat swiftlint; do +for linter in git markdownlint periphery shellcheck shfmt swift-format swiftformat swiftlint yamllint; do if [[ ! -x "$(command -v ${linter})" ]]; then printf $'error: %s is not installed. Run \'script/bootstrap\' or \'brew install %s\'.\n' "${linter}" "${linter}" exit 1 @@ -64,6 +64,10 @@ printf -- $'--> ๐ŸŒณ Git\n' PAGER='cat' git diff --check ((exit_code |= "${?}")) +printf -- $'--> ๐Ÿ–Š YAML\n' +yamllint . +((exit_code |= "${?}")) + printf -- $'--> ๐ŸŒ€ Periphery\n' script -q /dev/null periphery scan --strict --quiet --disable-update-check | (grep -vxE '(?:\x1b\[0;1;32m|\^D\x08{2})\* (?:\x1b\[0;0m\x1b\[0;1m)?No unused code detected\.(?:\x1b\[0;0m)?\r' || true) diff --git a/script/package b/script/package index 686647c..30df8f8 100755 --- a/script/package +++ b/script/package @@ -20,7 +20,7 @@ DISTRIBUTION_PLIST="Package/Distribution.plist" DSTROOT=.build/distributions script/install "$DSTROOT/usr/local" --universal -VERSION=$(script/version) +MAS_VERSION=$(script/version) echo "==> ๐Ÿ“ฆ Assemble an installer package" @@ -28,7 +28,7 @@ echo "==> ๐Ÿ“ฆ Assemble an installer package" pkgbuild \ --identifier "$IDENTIFIER" \ --install-location "/" \ - --version "$VERSION" \ + --version "$MAS_VERSION" \ --root "$DSTROOT" \ "$COMPONENT_PACKAGE" diff --git a/script/test b/script/test index e927db7..7c5f41c 100755 --- a/script/test +++ b/script/test @@ -13,6 +13,6 @@ if ! cd -- "${mas_dir}"; then exit 1 fi -printf $'==> โœ… Testing mas (%s)\n' "$(script/version)" +printf $'==> โœ… Testing mas (%s)\n' "$(script/version --write)" swift test diff --git a/script/uninstall b/script/uninstall index 5a92704..e672d28 100755 --- a/script/uninstall +++ b/script/uninstall @@ -9,12 +9,10 @@ # Override default prefix path with optional 1st arg if test -n "$1"; then PREFIX="$1" -elif [[ $(uname -m) == 'arm64' ]]; then - PREFIX=/opt/homebrew else - PREFIX=/usr/local + PREFIX=$(brew --prefix) fi echo "==> ๐Ÿ”ฅ Uninstalling mas from $PREFIX" -trash -F "$PREFIX/bin/mas" +trash -F "$PREFIX/bin/mas" || true diff --git a/script/version b/script/version index 0a3e177..73b1464 100755 --- a/script/version +++ b/script/version @@ -6,9 +6,6 @@ # Displays the current marketing version of mas. # -# This no longer works with MARKETING_VERSION build setting in Info.plist -# agvtool what-marketing-version -terse1 - mas_dir="$(readlink -fn "$(dirname "${BASH_SOURCE:-"${0}"}")/..")" if ! cd -- "${mas_dir}"; then @@ -16,14 +13,18 @@ if ! cd -- "${mas_dir}"; then exit 1 fi -VERSION=$(git describe --abbrev=0 --tags) -VERSION=${VERSION#v} +if [[ -z "${MAS_VERSION:-}" ]] && git describe >/dev/null 2>&1; then + # Use last tag if MAS_VERSION environment variable is unset or empty + MAS_VERSION=$(git describe --abbrev=0 --tags 2>/dev/null || true) +fi +echo "${MAS_VERSION#v}" -cat <"Sources/mas/Package.swift" +if [[ "${#}" -ge 1 && "${1}" == '--write' ]]; then + # Write new version into swift package + cat <Sources/mas/Package.swift /// Generated by \`script/version\`. enum Package { - static let version = "${VERSION}" + static let version = "${MAS_VERSION#v}" } EOF - -echo "${VERSION}" +fi diff --git a/script/version_bump b/script/version_bump new file mode 100755 index 0000000..10b22aa --- /dev/null +++ b/script/version_bump @@ -0,0 +1,61 @@ +#!/bin/bash -eu +# +# script/version_bump +# mas +# +# Increments the marketing version of mas. +# + +mas_dir="$(readlink -fn "$(dirname "${BASH_SOURCE:-"${0}"}")/..")" + +if ! cd -- "${mas_dir}"; then + printf $'Error: Could not cd into mas directory: %s\n' "${mas_dir}" >&2 + exit 1 +fi + +LOCAL_MAS_FORMULA_PATH="Homebrew/mas.rb" +LOCAL_TAP_FORMULA_PATH="Homebrew/mas-tap.rb" +SWIFT_PACKAGE="Sources/mas/Package.swift" + +function usage { + echo "Usage: version_bump v0.0 [sha1_hash]" + echo "- existing tag name" + echo "- sha will be inferred from the given tag if not provided" + exit 1 +} + +if [[ $# -lt 1 ]]; then + usage +fi + +# arg 1 - version tag +MAS_VERSION="${1}" + +# arg 2 - revision (commit hash) +if [[ "${#}" -ge 2 ]]; then + REVISION="${2}" +else + REVISION=$(git rev-parse "${MAS_VERSION}") +fi + +echo "MAS_VERSION: ${MAS_VERSION}" +echo "REVISION: ${REVISION}" + +# Write new version into swift package +cat <"${SWIFT_PACKAGE}" +/// Generated by \`script/version_bump\`. +enum Package { + static let version = "${MAS_VERSION#v}" +} +EOF + +echo +cat "${SWIFT_PACKAGE}" + +# Write new version into brew formulae +for file in ${LOCAL_MAS_FORMULA_PATH} ${LOCAL_TAP_FORMULA_PATH}; do + echo "${file}" + sd '( +tag: +)"[^"]+"' "\$1\"${MAS_VERSION}\"" "${file}" + sd '( +revision: +)"[^"]+"' "\$1\"${REVISION}\"" "${file}" + sd '( +root_url "https://github.com/mas-cli/mas/releases/download/).+' "\${1}${MAS_VERSION}\"" "${file}" +done