Facebook открыл код проекта DotSlash

Facebook объявил об открытии кода утилиты командной строки dotslash, созданной для упрощения распространения набора исполняемых файлов для разных платформ. Утилита рассчитана на выполнение сценариев, автоматизирующих загрузку подходящего для текущей платформы исполняемого файла, проверку его целостности и исполнение. Код утилиты написан на языке Rust и распространяется под лицензиями MIT и Apache 2.0.

Утилита решает задачи, схожие с shell-скриптами для запуска исполняемых файлов для текущей платформы, но при этом избавляет от необходимости включения в комплект исполняемых файлов для всех поддерживаемых платформ. DotSlash также позволяет хранить информацию о собранных исполняемых файлов в репозитории вместе с кодом, при этом размещая сами файлы на отдельных загрузочных серверах, что позволяет избежать роста размера репозитория и снизить нагрузку на систему ввода/вывода при выполнении операций клонирования.

При использовании DotSlash набор специфичных для разных платформ исполняемых файлов заменяется на один сценарий, включающий описание логики выбора исполняемого файла в привязке к поддерживаемым платформам. После запуска DotSlash-сценария необходимый для текущей платформы исполняемый файл динамически загружается, распаковывается, проверяется по криптографическому хэшу и сохраняется в локальном кэше для последующих запусков. Файлы передаются в сжатом виде. Сценарии DotSlash могут генерироваться автоматически для релизов, публикуемых на GitHub.

Пример DotSlash-сценария для распространения сборок Node.js 18.19.0 для платформ macOS ARM64, macOS x86_64 и Linux x86_64:


#!/usr/bin/env dotslash

{
  "name": "node-v18.19.0",
  "platforms": {
    "macos-aarch64": {
      "size": 40660307,
      "hash": "blake3",
      "digest": "6e2ca33951e586e7670016dd9e503d028454bf9249d5ff556347c3d98c347c34",
      "format": "tar.gz",
      "path": "node-v18.19.0-darwin-arm64/bin/node",
      "providers": [
        {
          "url": "https://nodejs.org/dist/v18.19.0/node-v18.19.0-darwin-arm64.tar.gz"
        }
      ]
    },
   
    "macos-x86_64": {
      "size": 42202872,
      "hash": "blake3",
      "digest": "37521058114e7f71e0de3fe8042c8fa7908305e9115488c6c29b514f9cd2a24c",
      "format": "tar.gz",
      "path": "node-v18.19.0-darwin-x64/bin/node",
      "providers": [
        {
          "url": "https://nodejs.org/dist/v18.19.0/node-v18.19.0-darwin-x64.tar.gz"
        }
      ]
    },

    "linux-x86_64": {
      "size": 44694523,
      "hash": "blake3",
      "digest": "72b81fc3a30b7bedc1a09a3fafc4478a1b02e5ebf0ad04ea15d23b3e9dc89212",
      "format": "tar.gz",
      "path": "node-v18.19.0-linux-x64/bin/node",
      "providers": [
        {
          "url": "https://nodejs.org/dist/v18.19.0/node-v18.19.0-linux-x64.tar.gz"
        }
      ]
    }
  }
}

Источник: http://www.opennet.ru/opennews/art.shtml?num=60562