kar 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -0
- data/kar.gemspec +1 -5
- data/lib/kar/cargotask.rb +113 -0
- data/lib/kar/dsl.rb +25 -0
- metadata +2 -2
- data/lib/kar/version.rb +0 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 997bfcbcd92bf9aea3625eaa6f66622c9077e93e754c83328ee48a24d0d42a59
         | 
| 4 | 
            +
              data.tar.gz: 1a32d287aa169199d98d8af143c3a12be8c84b3be894faf7c5a32479bf1887c8
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d71c84b1473e99ceb209f8c9510f66823446be3ae68aca1e31e389f6ff5c23c6bdcad4cf3886e28b8144dbf7c04c76ef4dede8ed2721d6d75e9d5ae11e28c0c9
         | 
| 7 | 
            +
              data.tar.gz: 240afac657222785391bb06b87254137e9fdacc71c323e155a12787d51abe163221c4c0560d1bb6bc89d68f1fbdd8fcb985a01f2ff1be289afdedbb4241a253a
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    
    
        data/kar.gemspec
    CHANGED
    
    | @@ -1,10 +1,6 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require_relative "lib/kar/version"
         | 
| 4 | 
            -
             | 
| 5 1 | 
             
            Gem::Specification.new do |spec|
         | 
| 6 2 | 
             
              spec.name = "kar"
         | 
| 7 | 
            -
              spec.version =  | 
| 3 | 
            +
              spec.version = "0.1.2"
         | 
| 8 4 | 
             
              spec.authors = ["Kitaiti Makoto"]
         | 
| 9 5 | 
             
              spec.email = ["KitaitiMakoto@gmail.com"]
         | 
| 10 6 |  | 
| @@ -0,0 +1,113 @@ | |
| 1 | 
            +
            require "rake/clean"
         | 
| 2 | 
            +
            require "rubygems/ext"
         | 
| 3 | 
            +
            require "json"
         | 
| 4 | 
            +
            require "shellwords"
         | 
| 5 | 
            +
            require "stringio"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module Kar
         | 
| 8 | 
            +
              class CargoTask
         | 
| 9 | 
            +
                include Rake::DSL
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def initialize(target)
         | 
| 12 | 
            +
                  @target = target
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  define
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                private
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def verbose?
         | 
| 20 | 
            +
                  Rake.verbose == true
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def define
         | 
| 24 | 
            +
                  file dl_path => [manifest, lock_file] + src do |t|
         | 
| 25 | 
            +
                    results = Results.new
         | 
| 26 | 
            +
                    begin
         | 
| 27 | 
            +
                      Gem::Ext::CargoBuilder.new.build t.source, ".", results, [], lib_dir, File.expand_path(ext_dir)
         | 
| 28 | 
            +
                    rescue => error
         | 
| 29 | 
            +
                      $stderr.puts results unless verbose?
         | 
| 30 | 
            +
                      fail
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                  CLEAN.include dl_name, dl_path
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  namespace :cargo do
         | 
| 36 | 
            +
                    task @target => dl_path
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    # TODO: Consider the case `target` is "validate"
         | 
| 39 | 
            +
                    namespace :validate do
         | 
| 40 | 
            +
                      task @target => manifest do |t|
         | 
| 41 | 
            +
                        `cargo metadata --format-version=1 --manifest-path=#{manifest.shellescape} --locked --quiet`
         | 
| 42 | 
            +
                        fail unless $?.success?
         | 
| 43 | 
            +
                      end
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    desc "Validate Cargo.lock files"
         | 
| 47 | 
            +
                    task validate: "cargo:validate:#{@target}"
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  desc "Build all extensions in Rust"
         | 
| 51 | 
            +
                  task cargo: "cargo:#{@target}"
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def gemspec
         | 
| 55 | 
            +
                  @gemspec ||= Gem::Specification.load("#{@target}.gemspec")
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                def manifest
         | 
| 59 | 
            +
                  @manifest ||= gemspec.extensions.first
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                def lock_file
         | 
| 63 | 
            +
                  @lock_file ||= manifest.ext(".lock")
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                def ext_dir
         | 
| 67 | 
            +
                  @ext_dir ||= File.dirname(manifest)
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                def lib_dir
         | 
| 71 | 
            +
                  # When a gem include an extension, the first element of require_paths is the directory for extensions and the second is for Ruby files.
         | 
| 72 | 
            +
                  @lib_dir ||= gemspec.require_paths[1]
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def dl_name
         | 
| 76 | 
            +
                  @dl_name ||= "#{gemspec.name}.#{RbConfig::CONFIG["DLEXT"]}"
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                def dl_path
         | 
| 80 | 
            +
                  @dl_path ||= File.join(lib_dir, dl_name)
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                def src
         | 
| 84 | 
            +
                  @src ||= FileList["#{ext_dir}/src/*/*.rs"]
         | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                class Results
         | 
| 88 | 
            +
                  def initialize
         | 
| 89 | 
            +
                    @io = verbose? ? $stdout : StringIO.new
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                  def <<(output)
         | 
| 93 | 
            +
                    # Always break a line even when output isn't terminated by a line break
         | 
| 94 | 
            +
                    @io.puts output
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                  def to_s
         | 
| 98 | 
            +
                    if verbose?
         | 
| 99 | 
            +
                      ""
         | 
| 100 | 
            +
                    else
         | 
| 101 | 
            +
                      @io.rewind
         | 
| 102 | 
            +
                      @io.read
         | 
| 103 | 
            +
                    end
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  private
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  def verbose?
         | 
| 109 | 
            +
                    Rake.verbose == true
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
            end
         | 
    
        data/lib/kar/dsl.rb
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require "kar/uritask"
         | 
| 2 | 
            +
            require "kar/cargotask"
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Kar
         | 
| 4 5 | 
             
              # DSLs you can use in your Rakefiles
         | 
| @@ -18,6 +19,9 @@ module Kar | |
| 18 19 | 
             
              #
         | 
| 19 20 | 
             
              #   # Downloads file from https://example.com/remote/file and save to local/file
         | 
| 20 21 | 
             
              #   download "local/file" => "https://example.org/remote/file"
         | 
| 22 | 
            +
              #
         | 
| 23 | 
            +
              #   # Build extension in Rust
         | 
| 24 | 
            +
              #   cargo "my_gem"
         | 
| 21 25 | 
             
              module DSL
         | 
| 22 26 | 
             
                def files(file_list)
         | 
| 23 27 | 
             
                  file_list.each do |file_name|
         | 
| @@ -46,6 +50,27 @@ module Kar | |
| 46 50 | 
             
                  URITask.new args
         | 
| 47 51 | 
             
                end
         | 
| 48 52 |  | 
| 53 | 
            +
                # Declare a cargo task which builds extension in Rust by Cargo.
         | 
| 54 | 
            +
                #
         | 
| 55 | 
            +
                # @example
         | 
| 56 | 
            +
                #   # Rakefile
         | 
| 57 | 
            +
                #   cargo "my_gem"
         | 
| 58 | 
            +
                #
         | 
| 59 | 
            +
                #   task build: :cargo
         | 
| 60 | 
            +
                #
         | 
| 61 | 
            +
                #   # shell
         | 
| 62 | 
            +
                #   % rake cargo
         | 
| 63 | 
            +
                #
         | 
| 64 | 
            +
                # Also defines a cargo:validate task which validates version `Cargo.lock`s are up-to-date.
         | 
| 65 | 
            +
                # It's useful to add them to the dependency of build task and prevent building invalid gem package.
         | 
| 66 | 
            +
                #
         | 
| 67 | 
            +
                # Uses {https://docs.ruby-lang.org/en/master/Gem/Ext/CargoBuilder.html Gem::Ext::CargoBuilder} internally unlike {https://oxidize-rb.org/docs/api-reference/rb-sys-gem-config#rbsysextensiontask RbSys::ExtensionTask}
         | 
| 68 | 
            +
                # in order to build in the same way as `gem install` command, even though the output might be less usefull.
         | 
| 69 | 
            +
                # When `RbSys::Extension` uses the same way, this function may be deprecated.
         | 
| 70 | 
            +
                def cargo(target)
         | 
| 71 | 
            +
                  CargoTask.new target
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 49 74 | 
             
                Rake::DSL.prepend self
         | 
| 50 75 | 
             
              end
         | 
| 51 76 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: kar
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Kitaiti Makoto
         | 
| @@ -80,9 +80,9 @@ files: | |
| 80 80 | 
             
            - agpl-3.0.txt
         | 
| 81 81 | 
             
            - kar.gemspec
         | 
| 82 82 | 
             
            - lib/kar.rb
         | 
| 83 | 
            +
            - lib/kar/cargotask.rb
         | 
| 83 84 | 
             
            - lib/kar/dsl.rb
         | 
| 84 85 | 
             
            - lib/kar/uritask.rb
         | 
| 85 | 
            -
            - lib/kar/version.rb
         | 
| 86 86 | 
             
            - sig/kar.rbs
         | 
| 87 87 | 
             
            homepage: https://gitlab.com/KitaitiMakoto/kar
         | 
| 88 88 | 
             
            licenses:
         |