├── .gitignore ├── Casks ├── marmaduke-chromium-nosync.rb ├── marmaduke-chromium.rb └── marmaduke-chromium-ungoogled.rb ├── .github └── workflows │ ├── main.yml │ ├── sync.yml │ └── sync.py ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # IDEA 2 | .idea 3 | 4 | # rbenv 5 | .ruby-version -------------------------------------------------------------------------------- /Casks/marmaduke-chromium-nosync.rb: -------------------------------------------------------------------------------- 1 | cask 'marmaduke-chromium-nosync' do 2 | version '84.0.4147.89' 3 | sha256 '1fcb785f59b201962dfe88aab7f48a80a5d292acb53ea25298f0cae0f2b1b859' 4 | 5 | url "https://github.com/macchrome/macstable/releases/download/v#{version}-r768962-macOS/Chromium.#{version}.nosync.app.zip" 6 | name 'Chromium' 7 | homepage 'https://github.com/macchrome/macstable/releases' 8 | 9 | app 'Chromium.app' 10 | end 11 | -------------------------------------------------------------------------------- /Casks/marmaduke-chromium.rb: -------------------------------------------------------------------------------- 1 | cask 'marmaduke-chromium' do 2 | version '127.6533.61' 3 | sha256 '2cf14c65d08b6c754b2a4d2abbb4b4c4197e10d3fcab229b392c754b9d6f9c3c' 4 | 5 | url 'https://github.com/macchrome/macstable/releases/download/v127.6533.61-M127.0.6533.61-r1313161-macOS/Chromium.app.sync-127.0.6533.61.tar.xz' 6 | name 'Chromium' 7 | homepage 'https://github.com/macchrome/macstable/releases' 8 | 9 | app 'Chromium.app' 10 | end -------------------------------------------------------------------------------- /Casks/marmaduke-chromium-ungoogled.rb: -------------------------------------------------------------------------------- 1 | cask 'marmaduke-chromium-ungoogled' do 2 | version '142.7444.215' 3 | sha256 'd02087b00a97b5c72eacdfa5712b96492bba6b3fc67b870ebd2aa8bc93abc1dc' 4 | 5 | url 'https://github.com/macchrome/macstable/releases/download/v142.7444.215-M142.0.7444.215-r1522585-macOS/Chromium.app.ungoogled-142.0.7444.215.tar.xz' 6 | name 'Chromium' 7 | homepage 'https://github.com/macchrome/macstable/releases' 8 | 9 | app 'Chromium.app' 10 | end 11 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: [push, workflow_dispatch] 4 | 5 | jobs: 6 | install_homebrew: 7 | runs-on: macos-latest 8 | steps: 9 | - name: Install Homebrew 10 | run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 11 | - name: Tap Repo 12 | run: brew tap mtslzr/marmaduke-chromium 13 | - name: Update Brew 14 | run: brew update 15 | - name: Install Cask 16 | run: brew install --cask marmaduke-chromium 17 | - name: Uninstall Cask 18 | run: brew uninstall --cask marmaduke-chromium 19 | - name: Install Cask (nosync) 20 | run: brew install --cask marmaduke-chromium-nosync 21 | - name: Uninstall Cask (nosync) 22 | run: brew uninstall --cask marmaduke-chromium-nosync 23 | - name: Install Cask (ungoogled) 24 | run: brew install --cask marmaduke-chromium-ungoogled 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Matthew Salazar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /.github/workflows/sync.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: MacstableSync 4 | 5 | # Controls when the action will run. 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the master branch 8 | schedule: 9 | - cron: 0 21 * * * 10 | 11 | # Allows you to run this workflow manually from the Actions tab 12 | workflow_dispatch: 13 | 14 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 15 | jobs: 16 | # This workflow contains a single job called "build" 17 | build: 18 | # The type of runner that the job will run on 19 | runs-on: ubuntu-latest 20 | 21 | # Steps represent a sequence of tasks that will be executed as part of the job 22 | steps: 23 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 24 | - uses: actions/checkout@v3 25 | 26 | # Runs a single command using the runners shell 27 | - uses: actions/setup-python@v3 28 | with: 29 | python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax 30 | architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified 31 | - run: python ./.github/workflows/sync.py 32 | 33 | - name: Commit files 34 | run: | 35 | git config --local user.email "action@github.com" 36 | git config --local user.name "GitHub Action" 37 | git diff --quiet || git commit -m "Update tap" -a 38 | - name: Push changes 39 | uses: ad-m/github-push-action@master 40 | with: 41 | github_token: ${{ secrets.TOKEN }} 42 | branch: master 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Marmaduke Chromium (Homebrew Tap) 2 | 3 | *Forked from [cpbotha/homebrew-marmaduke-chromium](https://github.com/cpbotha/homebrew-marmaduke-chromium).* 4 | 5 | All Chromium releases can be found at [Woolyss](https://chromium.woolyss.com). 6 | Builds are pulled from [macchrome/macstable](https://github.com/macchrome/macstable). 7 | 8 | ![](https://github.com/mtslzr/marmaduke-chromium/workflows/Test/badge.svg) 9 | 10 | **Current Versions** 11 | 12 | ![](https://img.shields.io/badge/marmaduke--chromium-109.5414.65%20(1070088)-blue) 13 | 14 | ![](https://img.shields.io/badge/marmaduke--chromium--nosync-84.0.4147.89%20(768962)-lightblue) 15 | 16 | ![](https://img.shields.io/badge/marmaduke--chromium--ungoogled-106.5249.061%20(106.0.5249.61)-yellow) 17 | 18 | ## Installation 19 | 20 | ```bash 21 | brew tap mtslzr/marmaduke-chromium 22 | brew update 23 | brew install marmaduke-chromium 24 | ``` 25 | 26 | ## Casks 27 | 28 | This tap includes three versions of Marmaduke Chromium: 29 | 30 | `marmaduke-chromium` - Includes Google Sync and widevine (DRM for Netflix). 31 | 32 | `marmaduke-chromium-nosync` - Does not include Google Sync nor widevine. 33 | 34 | `marmaduke-chromium-ungoogled` - ungoogled-chromium ([Eloston/ungoogled-chromium/](https://github.com/Eloston/ungoogled-chromium/)) 35 | 36 | If you're unsure, you most likely want to install `marmaduke-chromium`. 37 | 38 | ## Removal 39 | 40 | ```bash 41 | brew uninstall marmaduke-chromium 42 | brew untap mtslzr/marmaduke-chromium 43 | ``` 44 | 45 | ## macOS / "The App Can't Be Opened" 46 | 47 | As is the case with numerous Homebrew packages, macOS will warn the first time you open Chromium after an install/update. 48 | 49 | For more information, see [here](https://docs.brew.sh/FAQ#why-cant-i-open-a-mac-app-from-an-unidentified-developer). 50 | 51 | ## Updates 52 | 53 | If you notice a missing update, please [reach out](mailto:m@tthewsalazar.com) or open a merge request. Thanks! 54 | -------------------------------------------------------------------------------- /.github/workflows/sync.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding:utf-8 -*- 3 | 4 | import sys 5 | import os 6 | import urllib.request 7 | import hashlib 8 | import json 9 | import re 10 | 11 | 12 | TEMPLATE = { 13 | "nosync.app": { 14 | "name": r"Chromium\.(\d+\.){3}\d+\.nosync\.app\.(zip|tar\.xz)", 15 | "pattern": r"marmaduke--chromium--nosync-(\d+\.){3}\d+%20\(\d+\)-lightblue", 16 | "replace": "marmaduke--chromium--nosync-{version}%20({revision})-lightblue", 17 | "path": "marmaduke-chromium-nosync.rb", 18 | "content": """cask 'marmaduke-chromium-nosync' do 19 | version '%s' 20 | sha256 '%s' 21 | 22 | url "%s" 23 | name 'Chromium' 24 | homepage 'https://github.com/macchrome/macstable/releases' 25 | 26 | app 'Chromium.app' 27 | end 28 | """}, 29 | 30 | "app.ungoogled": { 31 | "name": r"Chromium\.app\.ungoogled-(\d+\.){3}\d+\.(zip|tar\.xz)", 32 | "pattern": r"marmaduke--chromium--ungoogled-(\d+\.){3}\d+%20\(\d+\)-yellow", 33 | "replace": "marmaduke--chromium--ungoogled-{version}%20({revision})-yellow", 34 | "path": "marmaduke-chromium-ungoogled.rb", 35 | "content": """cask 'marmaduke-chromium-ungoogled' do 36 | version '%s' 37 | sha256 '%s' 38 | 39 | url '%s' 40 | name 'Chromium' 41 | homepage 'https://github.com/macchrome/macstable/releases' 42 | 43 | app 'Chromium.app' 44 | end 45 | """}, 46 | 47 | "sync.app": { 48 | "name": r"Chromium\.app\.sync-(\d+\.){3}\d+\.(zip|tar\.xz)", 49 | "pattern": r"marmaduke--chromium-(\d+\.){3}\d+%20\(\d+\)-blue", 50 | "replace": "marmaduke--chromium-{version}%20({revision})-blue", 51 | "path": "marmaduke-chromium.rb", 52 | "content": """cask 'marmaduke-chromium' do 53 | version '%s' 54 | sha256 '%s' 55 | 56 | url '%s' 57 | name 'Chromium' 58 | homepage 'https://github.com/macchrome/macstable/releases' 59 | 60 | app 'Chromium.app' 61 | end"""}, 62 | } 63 | 64 | 65 | def generate(): 66 | api_url = 'https://api.github.com/repos/macchrome/macstable/releases' 67 | current_dir = os.path.dirname(os.path.realpath(__file__)) 68 | response = urllib.request.urlopen(api_url) 69 | html = response.read() 70 | data = json.loads(html.decode('utf-8')) 71 | latest_set = set() 72 | readme_path = os.path.join(current_dir, '../../README.md') 73 | with open(readme_path) as f: 74 | readme_data = f.read() 75 | for release in data: 76 | for asset in release.get('assets', []): 77 | for config_name, config in TEMPLATE.items(): 78 | if config_name in latest_set: 79 | continue 80 | if re.match(config['name'], asset['name']) and config_name not in latest_set: 81 | tags = release['tag_name'].split('-') 82 | version = tags[0][1:] 83 | i = 1 84 | while i < len(tags): 85 | if tags[i].startswith('r'): 86 | revision = tags[i] 87 | break 88 | else: 89 | i += 1 90 | readme_data = re.sub(config['pattern'], config['replace'].format(version=version, revision=revision[1:]), readme_data) 91 | file_hash = hashlib.sha256() 92 | with urllib.request.urlopen(asset['browser_download_url']) as f: 93 | chunk = f.read(1024) 94 | while chunk: 95 | file_hash.update(chunk) 96 | chunk = f.read(1024) 97 | # file_hash.update(asset['browser_download_url'].encode('utf-8')) 98 | sha256 = file_hash.hexdigest() 99 | rb_path = os.path.join(current_dir, '../../Casks', config['path']) 100 | with open(rb_path, 'w') as f: 101 | f.write(config["content"] % (version, sha256, asset['browser_download_url'])) 102 | latest_set.add(config_name) 103 | with open(readme_path, 'w') as f: 104 | f.write(readme_data) 105 | 106 | 107 | def run_test(): 108 | api_url = 'https://api.github.com/repos/macchrome/macstable/releases' 109 | current_dir = os.path.dirname(os.path.realpath(__file__)) 110 | response = urllib.request.urlopen(api_url) 111 | html = response.read() 112 | data = json.loads(html.decode('utf-8')) 113 | latest_set = set() 114 | for release in data: 115 | for asset in release.get('assets', []): 116 | for config_name, config in TEMPLATE.items(): 117 | if config_name in latest_set: 118 | continue 119 | if re.match(config['name'], asset['name']) and config_name not in latest_set: 120 | tags = release['tag_name'].split('-') 121 | version = tags[0][1:] 122 | i = 1 123 | while i < len(tags): 124 | if tags[i].startswith('r'): 125 | revision = tags[i] 126 | break 127 | else: 128 | i += 1 129 | file_hash = hashlib.sha256() 130 | download_url = asset['browser_download_url'] 131 | print('%s %s %s' %(version, revision, download_url)) 132 | sha256 = file_hash.hexdigest() 133 | latest_set.add(config_name) 134 | 135 | 136 | def main(): 137 | if len(sys.argv) > 1 and sys.argv[1] == 'test': 138 | run_test() 139 | else: 140 | generate() 141 | 142 | if __name__ == '__main__': 143 | main() 144 | --------------------------------------------------------------------------------