stack_car 0.18.0 → 0.19.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6ed8d5c6219471376a05ccc900ef285e6dd0409c4b6954a115282280fdbfb38
4
- data.tar.gz: f87e0c76404381eda7bcf77e08ea24a937f197556cb77ad0e677540db09eba08
3
+ metadata.gz: 90e88a55ea7a8c0d22d9dbe7a1cd65b090a8c45f14a60608d82e152c993637dd
4
+ data.tar.gz: d6b2c2278fdc79e14f01c62db89af4a2c393b6a05d1248d4ca7bc04053df6f5e
5
5
  SHA512:
6
- metadata.gz: 348b12ba0d514385f5b1b1263581e987aae3e2714c8a61aa888305a69fff5ce18b1a83906f04a349054dd4dd275a7df9d7ccbc005ecf3b03be0f0769ab1f25e0
7
- data.tar.gz: c83f60d3aadd3b9e8aae2bd2fec26ed27759fdf4a8be6a1ef088f1e76eb841625cc00ce2982aab1f1c6261579f06a06eafe303953092aa90125053da970a3c7e
6
+ metadata.gz: 7ee954fc6d2646fb4e5056de6397785fc78f87c55529c1b86af5c5d88daaa1af73cf5cfdbc7c7db5e4eaddc34d0a889d875e0ab00381c6aebc05ac64fc88a481
7
+ data.tar.gz: fd8d7f014fcd1deef882dd9deeefa4886f091ff5ddcad96e7f48a1ee1a06cd296b201bb05b5e419cd6497e4d11082c27396ea6dd11c87047794340c5dfd4ff26
@@ -1,35 +1,35 @@
1
1
  name: Test
2
- on:
2
+ on:
3
3
  push:
4
4
  branches:
5
5
  - main
6
6
  pull_request:
7
7
  branches:
8
8
  - main
9
- jobs:
9
+ jobs:
10
10
  rspec:
11
11
  name: Run rspec with ruby
12
12
  runs-on: ubuntu-latest
13
13
  steps:
14
- - name: Checkout code
15
- uses: actions/checkout@v3
16
- - name: Cache
17
- uses: actions/cache@v2.1.3
18
- with:
19
- path: vendor/bundle
20
- key: '2.3'
21
- - name: Setup Ruby
22
- uses: ruby/setup-ruby@v1.59.1
23
- with:
24
- ruby-version: '2.3'
25
- - name: Dependencies
26
- run: |
27
- bundle config path vendor/bundle
28
- bundle install
29
- - name: Rspec
30
- run: 'bundle exec rspec'
31
- - name: Publish Test Report
32
- uses: mikepenz/action-junit-report@v3
33
- if: always() # always run even if the previous step fails
34
- with:
35
- report_paths: '**/build/test-results/test/TEST-*.xml'
14
+ - name: Checkout code
15
+ uses: actions/checkout@v3
16
+ - name: Cache
17
+ uses: actions/cache@v4.2.3
18
+ with:
19
+ path: vendor/bundle
20
+ key: "2.3"
21
+ - name: Setup Ruby
22
+ uses: ruby/setup-ruby@v1.59.1
23
+ with:
24
+ ruby-version: "2.3"
25
+ - name: Dependencies
26
+ run: |
27
+ bundle config path vendor/bundle
28
+ bundle install
29
+ - name: Rspec
30
+ run: "bundle exec rspec"
31
+ - name: Publish Test Report
32
+ uses: mikepenz/action-junit-report@v3
33
+ if: always() # always run even if the previous step fails
34
+ with:
35
+ report_paths: "**/build/test-results/test/TEST-*.xml"
data/.gitignore CHANGED
@@ -8,4 +8,6 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  **/.#*
11
- /public/*
11
+ /public/*
12
+ /proxy/localhost*
13
+ .tool-versions
data/README.md CHANGED
@@ -17,28 +17,76 @@ Stack Car is an opinionated set of tools around Docker and Rails. It provides c
17
17
  Because stack_car will be used to run your application in side of Docker, you want to install stack car in to your system Ruby instead of putting in your applications Gemfile
18
18
 
19
19
  ```bash
20
- gem install stack_car
20
+ gem install stack_car
21
21
  ```
22
22
 
23
23
  ## Usage
24
24
 
25
- Commands are accesible via the "sc" short cut. Note: this will need to be in your command path in front of the spreadsheet command (sc), which is a fairly archaiac unix spreadsheet tool. We're guessing you don't edit a lot of spreadsheets in your terminal, but if you do, we also figure you can override your path order pretty easily. Many of these commands have short versions or alias to make remembering them easier. If there are obvious aliases missing, PRs are welcome.
25
+ Commands are accessible via the "sc" short cut. Note: this will need to be in your command path in front of the spreadsheet command (sc), which is a fairly archaiac unix spreadsheet tool. We're guessing you don't edit a lot of spreadsheets in your terminal, but if you do, we also figure you can override your path order pretty easily. Many of these commands have short versions or alias to make remembering them easier. If there are obvious aliases missing, PRs are welcome.
26
26
 
27
27
  ```ruby
28
28
  Commands:
29
29
  stack_car bundle_exec ARGS # wraps docker compose exec web bundle exec unless --service is used to specify (sc be ARGS)
30
30
  stack_car console ARGS # shortcut to start rails console
31
- stack_car dockerize DIR # Will copy the docker tempates in to your project, see options for supported dependencies
31
+ stack_car dockerize DIR # Will copy the docker templates in to your project, see options for supported dependencies
32
32
  stack_car exec ARGS # wraps docker compose exec web unless --service is used to specify
33
33
  stack_car help [COMMAND] # Describe available commands or one specific command
34
34
  stack_car stop # starts docker compose with rebuild and orphan removal, defaults to all
35
35
  stack_car up # starts docker compose with rebuild and orphan removal, defaults to web
36
36
  stack_car walk ARGS # wraps docker compose run web unless --service is used to specify
37
+ stack_car proxy up # starts proxy container for SSL termination
38
+ stack_car proxy down # stops running proxy container
39
+ stack_car proxy cert # generates SSL certificates for local development, uses *.localhost.direct
37
40
  ```
38
41
 
42
+ ## Proxy
43
+ StackCar has a built-in proxy designed to simplify local SSL development. The proxy provides SSL termination for your web services, allowing you to run your applications with HTTPS locally.
44
+
45
+ ### Getting Started with the Proxy
46
+
47
+ To use the StackCar proxy:
48
+ 1. **Download and Install the SSL certificates** for local development:
49
+ ```bash
50
+ sc proxy cert
51
+ ```
52
+ This will download the SSL certificates for `*.localhost.direct`. This only needs to be done once per version of stack_car.
53
+
54
+ 2. **Start the proxy**:
55
+ ```bash
56
+ sc proxy up
57
+ ```
58
+
59
+ 3. If you application is running in Docker, make sure you application has labels:
60
+ ```yaml
61
+ labels:
62
+ - "traefik.enable=true"
63
+ - "traefik.http.routers.my-app.tls=true"
64
+ - "traefik.http.routers.my-app.entrypoints=websecure"
65
+ - "traefik.http.routers.my-app.rule=HostRegexp(`my-app.localhost.direct`)"
66
+ - "traefik.http.services.my-app.loadbalancer.server.port=3000"
67
+ ```
68
+
69
+ 4. **Access your application** using `https://my-app.localhost.direct`
70
+
71
+ ### Proxy Configuration
72
+
73
+ The proxy configuration can be customized in your `docker-compose.yml` file. By default, it's configured to handle SSL termination on port 443 and forward traffic to your application services.
74
+
75
+ ### Stopping the Proxy
76
+
77
+ When you're done working with SSL, you can stop the proxy:
78
+ ```bash
79
+ sc proxy down
80
+ ```
81
+
82
+ ### Troubleshooting
83
+
84
+ - **Certificate issues**: If your browser doesn't trust the certificate, you may need to add the generated certificate to your system's trust store.
85
+ - **Port conflicts**: Ensure port 443 is available on your local machine.
86
+
39
87
  ## Development
40
88
 
41
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
89
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can run `bin/test_sc` to run the command but from your local check out. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
42
90
 
43
91
  **To install this gem onto your local machine**
44
92
  - Run `bundle exec rake install`
@@ -79,7 +127,7 @@ Alternatively, set it in your shell's `rc` file (`~/.bashrc`, `~/.zshrc`, etc.)
79
127
 
80
128
  With `THOR_MERGE` set, you can enter `m` at the command prompt when there is a conflict between app and `sc` template files.
81
129
 
82
- *Note*: For best experience, set `THOR_MERGE` to **GUI text editor** (ie. `code` or `atom`).
130
+ *Note*: For best experience, set `THOR_MERGE` to **GUI text editor** (ie. `code` or `atom`).
83
131
 
84
132
  Initiating a merge pulls 2 versions of the file to the editor. One is what is proposed by stack_car, the other is the original. **Add what you need from the template version to the original file and save the changes**.
85
133
 
@@ -107,7 +155,7 @@ stack_car will have provided sensible defaults for your services but customizati
107
155
  - Do a text search to find and replace any instances `CHANGEME` in the generated files
108
156
  - Add any **general environment variables** to `.env`
109
157
  - This sets defaults for all docker compose environments
110
- - Add any **development environment variables** to `.env.development`
158
+ - Add any **development environment variables** to `.env.development`
111
159
  - These set up any new values or overrides specific to your development env
112
160
  - Run `sc build` to build your image
113
161
  - On failed build, browse the terminal output to track down and squash any misconfigurations. Rebuild
data/bin/test_sc ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['STACK_CAR_DEBUG'] = 'true'
3
+ load "#{File.dirname(__FILE__)}/../lib/stack_car.rb"
4
+
5
+ StackCar::HammerOfTheGods.start(ARGV)
data/lib/stack_car/cli.rb CHANGED
@@ -2,6 +2,7 @@ require 'thor'
2
2
  require 'erb'
3
3
  require 'dotenv'
4
4
  require 'json'
5
+ require 'byebug' if ENV['STACK_CAR_DEBUG']
5
6
 
6
7
  module StackCar
7
8
  class HammerOfTheGods < Thor
@@ -11,10 +12,17 @@ module StackCar
11
12
  File.join(File.dirname(__FILE__), '..', '..', 'templates')
12
13
  end
13
14
 
15
+ def self.gem_root
16
+ File.join(File.dirname(__FILE__), '..', '..')
17
+ end
18
+
14
19
  def self.exit_on_failure?
15
20
  true
16
21
  end
17
22
 
23
+ desc 'proxy COMMAND', 'Manage the traefik proxy for local development'
24
+ subcommand 'proxy', Proxy
25
+
18
26
  method_option :service, default: 'web', type: :string, aliases: '-s'
19
27
  method_option :build, default: false, type: :boolean, aliases: '-b'
20
28
  method_option :logs, default: true, type: :boolean
@@ -330,6 +338,7 @@ module StackCar
330
338
  end
331
339
 
332
340
  protected
341
+
333
342
  def compose_depends(*excludes)
334
343
  @compose_depends = []
335
344
  services = [:fcrepo, :postgres, :mysql, :elasticsearch, :sidekiq, :solr, :redis, :mongodb, :memcached] - excludes
@@ -370,6 +379,7 @@ module StackCar
370
379
  if !result
371
380
  exit(1)
372
381
  end
382
+ result
373
383
  end
374
384
 
375
385
  def file_config
@@ -0,0 +1,64 @@
1
+ # From Dory https://github.com/FreedomBen/dory/blob/master/lib/dory/os.rb
2
+ module StackCar
3
+ module Os
4
+ def self.bash(command)
5
+ system("bash -c '#{command}'")
6
+ end
7
+
8
+ def self.ubuntu?
9
+ self.bash(self.ubuntu_cmd)
10
+ end
11
+
12
+ def self.fedora?
13
+ self.bash(self.fedora_cmd)
14
+ end
15
+
16
+ def self.arch?
17
+ self.bash(self.arch_cmd)
18
+ end
19
+
20
+ def self.macos?
21
+ self.bash('uname -a | grep "Darwin" > /dev/null')
22
+ end
23
+
24
+ def self.wsl?
25
+ self.bash(self.wsl_cmd)
26
+ end
27
+
28
+ def self.wsl_cmd
29
+ %q(
30
+ grep -i "microsoft\|wsl" /proc/version > /dev/null 2>&1
31
+ )
32
+ end
33
+
34
+ def self.ubuntu_cmd
35
+ %q(
36
+ if $(which lsb_release >/dev/null 2>&1); then
37
+ lsb_release -d | grep --color=auto "Ubuntu" > /dev/null
38
+ else
39
+ uname -a | grep --color=auto "Ubuntu" > /dev/null
40
+ fi
41
+ )
42
+ end
43
+
44
+ def self.fedora_cmd
45
+ %q(
46
+ if $(which lsb_release >/dev/null 2>&1); then
47
+ lsb_release -d | grep --color=auto "Fedora" > /dev/null
48
+ else
49
+ uname -r | grep --color=auto "fc" > /dev/null
50
+ fi
51
+ )
52
+ end
53
+
54
+ def self.arch_cmd
55
+ %q(
56
+ if $(which lsb_release >/dev/null 2>&1); then
57
+ lsb_release -d | grep --color=auto "Arch" > /dev/null
58
+ else
59
+ uname -a | grep --color=auto "ARCH" > /dev/null
60
+ fi
61
+ )
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,83 @@
1
+ require 'thor'
2
+ require 'open-uri'
3
+ require 'fileutils'
4
+ require 'archive/zip'
5
+
6
+ module StackCar
7
+ class Proxy < Thor
8
+ include Thor::Actions
9
+
10
+ desc 'up', 'Launch traefik proxy for local development, assumes localhost.direct is the domain'
11
+ def up
12
+ #find the socket
13
+ set_proxy_env
14
+ run("docker compose -f #{HammerOfTheGods.gem_root}/proxy/compose.yaml up -d")
15
+ end
16
+
17
+ desc 'down', 'Stop traefik proxy for local development'
18
+ def down
19
+ set_proxy_env
20
+ run("docker compose -f #{HammerOfTheGods.gem_root}/proxy/compose.yaml down")
21
+ end
22
+
23
+ desc 'cert', 'Add a self-signed certificate for localhost.direct to the system'
24
+ def cert
25
+ say("Downloading certificate package...")
26
+
27
+ IO.copy_stream(URI.open(download_url), output_file)
28
+ say("Download complete.")
29
+ unzip_file
30
+
31
+ if Os.macos?
32
+ run("sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain #{proxy_dir}/localhost.direct.SS.crt")
33
+ elsif Os.ubuntu?
34
+ run("sudo cp #{proxy_dir}/localhost.direct.SS.crt /usr/local/share/ca-certificates/localhost.direct.SS.crt")
35
+ run("sudo update-ca-certificates")
36
+ elsif Os.wsl?
37
+ say("\n\n\nFor WSL, you need to add the certificate to Windows certificate store:\n")
38
+ say("1. Copy the certificate to a Windows-accessible location:\n")
39
+ run("cp #{proxy_dir}/localhost.direct.SS.crt /mnt/c/temp/localhost.direct.SS.crt")
40
+ say("\n2. Now run this Windows command to import the certificate (requires admin rights):\n")
41
+ run("powershell.exe -Command \"Start-Process powershell -Verb RunAs -ArgumentList '-Command Import-Certificate -FilePath C:\\temp\\localhost.direct.SS.crt -CertStoreLocation Cert:\\LocalMachine\\Root'\"")
42
+ say("\n3. Then restart your browser to apply the changes\n\n")
43
+ else
44
+ say("\n\n\nPlease figure out how to add a certificate to your system, then open a PR for your OS/Distro")
45
+ say("Files are located #{ENV['PWD']}/proxy/localhost.direct.SS.crt and #{ENV['PWD']}/proxy/localhost.direct.SS.key\n\n\n")
46
+ exit(1)
47
+ end
48
+ end
49
+
50
+ protected
51
+
52
+ def unzip_file
53
+ say("\n\n\nEnter the password found https://github.com/Upinel/localhost.direct?tab=readme-ov-file#a-non-public-ca-certificate-if-you-have-admin-right-on-your-development-environment-you-can-use-the-following-10-years-long-pre-generated-self-signed-certificate\n\n\n")
54
+ password = ask('[Required] Enter the unzip password::')
55
+ zip_file = "#{proxy_dir}/localhost-ss"
56
+ Archive::Zip.extract(zip_file, proxy_dir, :password => password)
57
+ say("Successfully unzipped certificate files.")
58
+ rescue Zlib::DataError
59
+ say("Incorrect password. Please try again.")
60
+ exit(1)
61
+ end
62
+
63
+ def set_proxy_env
64
+ ENV['DOCKER_SOCKET'] ||= "/var/run/docker.sock"
65
+ unless File.exist?("#{HammerOfTheGods.gem_root}/proxy/localhost.direct.SS.crt")
66
+ say("you must run proxy cert once after installing this gem before using the proxy")
67
+ exit(1)
68
+ end
69
+ end
70
+
71
+ def proxy_dir
72
+ @proxy_dir ||= "#{HammerOfTheGods.gem_root}/proxy"
73
+ end
74
+
75
+ def download_url
76
+ @download_url ||= "https://aka.re/localhost-ss"
77
+ end
78
+
79
+ def output_file
80
+ @output_file ||= File.join(proxy_dir, "localhost-ss")
81
+ end
82
+ end
83
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StackCar
4
- VERSION = '0.18.0'
4
+ VERSION = '0.19.0'
5
5
  end
data/lib/stack_car.rb CHANGED
@@ -1,6 +1,8 @@
1
- require "stack_car/version"
2
- require "stack_car/cli"
3
- require "stack_car/dot_rc"
1
+ require_relative './stack_car/version'
2
+ require_relative './stack_car/os'
3
+ require_relative './stack_car/proxy'
4
+ require_relative './stack_car/cli'
5
+ require_relative './stack_car/dot_rc'
4
6
 
5
7
  ##
6
8
  # Ruby 3.x removed {File.exists?} in favor of {File.exist?}. This shim ensures that we can run
@@ -0,0 +1,56 @@
1
+ services:
2
+ traefik:
3
+ image: "traefik"
4
+ ports:
5
+ - "80:80"
6
+ - "443:443"
7
+ - "3333:3333"
8
+ volumes:
9
+ - "${DOCKER_SOCKET}:/var/run/docker.sock:ro"
10
+ - ./traefik.yml:/etc/traefik/traefik.yml
11
+ - ./localhost.direct.SS.crt:/etc/traefik/cert.pem
12
+ - ./localhost.direct.SS.key:/etc/traefik/key.pem
13
+ labels:
14
+ - traefik.enable=true
15
+ - traefik.http.routers.router.rule=Host(`traefik.localhost.direct`)
16
+ - traefik.http.routers.router.entrypoints=websecure
17
+ - traefik.http.services.router.loadbalancer.server.port=8080
18
+ - traefik.http.routers.router.tls=true
19
+ healthcheck:
20
+ test: ["CMD-SHELL", "traefik healthcheck --ping"]
21
+ interval: 4s
22
+ timeout: 4s
23
+ retries: 8
24
+ start_period: 4s
25
+
26
+ whoami:
27
+ image: traefik/whoami
28
+ ports:
29
+ - "80"
30
+ labels:
31
+ - "traefik.enable=true"
32
+ - "traefik.http.routers.whoami.tls=true"
33
+ - "traefik.http.routers.whoami.entrypoints=websecure"
34
+ - "traefik.http.routers.whoami.rule=Host(`whoami.localhost.direct`)"
35
+ - "traefik.http.services.whoami.loadbalancer.server.port=80"
36
+
37
+ # dnsmasq:
38
+ # image: joweisberg/dnsmasq
39
+ # restart: always
40
+ # ports:
41
+ # - ${DNSMASQ_PORT}:53
42
+ # - 5380:8080
43
+ # environment:
44
+ # HTTP_USER: ${DNSMASQ_USER}
45
+ # HTTP_PASS: ${DNSMASQ_PASSWORD}
46
+ # labels:
47
+ # - "traefik.enable=true"
48
+ # - "traefik.http.routers.dnsmasq.rule=Host(`dnsmasq.${DOMAIN}`)"
49
+ # - "traefik.http.services.dnsmasq.loadbalancer.server.port=8080"
50
+ # - "traefik.http.routers.dnsmasq.entrypoints=web"
51
+ # volumes:
52
+ # - ./dnsmasq/dnsmasq.conf:/etc/dnsmasq.conf
53
+ # - ./dnsmasq/dnsmasq.d/:/etc/dnsmasq.d
54
+ networks:
55
+ default:
56
+ name: stackcar
data/proxy/traefik.yml ADDED
@@ -0,0 +1,49 @@
1
+ ---
2
+ global:
3
+ sendAnonymousUsage: false
4
+
5
+ providers:
6
+ docker:
7
+ exposedByDefault: false
8
+ endpoint: "unix:///var/run/docker.sock"
9
+ file:
10
+ directory: /etc/traefik
11
+ watch: true
12
+
13
+ api:
14
+ insecure: true
15
+ dashboard: true
16
+
17
+ serversTransport:
18
+ insecureSkipVerify: true
19
+
20
+ entryPoints:
21
+ web:
22
+ address: ":80"
23
+ http:
24
+ redirections:
25
+ entryPoint:
26
+ to: websecure
27
+ scheme: https
28
+
29
+ websecure:
30
+ address: ":443"
31
+
32
+ tcp:
33
+ address: ":3333"
34
+
35
+ tls:
36
+ certificates:
37
+ - certFile: /etc/traefik/cert.pem
38
+ keyFile: /etc/traefik/key.pem
39
+ stores:
40
+ default:
41
+ defaultCertificate:
42
+ certFile: /etc/traefik/cert.pem
43
+ keyFile: /etc/traefik/key.pem
44
+
45
+ ping:
46
+ entryPoint: "web"
47
+
48
+ log:
49
+ level: DEBUG
data/stack_car.gemspec CHANGED
@@ -25,7 +25,8 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "yard"
26
26
  spec.add_development_dependency "yard-thor"
27
27
  spec.add_development_dependency "pry"
28
+ spec.add_runtime_dependency "archive-zip"
28
29
  spec.add_runtime_dependency "dotenv"
29
30
  spec.add_runtime_dependency "json", "~> 2.3"
30
- spec.add_runtime_dependency "thor", "~> 0.19"
31
+ spec.add_runtime_dependency "thor", "~> 0.20"
31
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack_car
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Kaufman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-19 00:00:00.000000000 Z
11
+ date: 2025-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: archive-zip
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: dotenv
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +142,14 @@ dependencies:
128
142
  requirements:
129
143
  - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: '0.19'
145
+ version: '0.20'
132
146
  type: :runtime
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: '0.19'
152
+ version: '0.20'
139
153
  description:
140
154
  email:
141
155
  - rob@notch8.com
@@ -157,13 +171,18 @@ files:
157
171
  - Rakefile
158
172
  - bin/console
159
173
  - bin/setup
174
+ - bin/test_sc
160
175
  - exe/sc
161
176
  - exe/stack_car
162
177
  - lib/stack_car.rb
163
178
  - lib/stack_car/cli.rb
164
179
  - lib/stack_car/dot_rc.rb
180
+ - lib/stack_car/os.rb
181
+ - lib/stack_car/proxy.rb
165
182
  - lib/stack_car/version.rb
166
183
  - logo.jpg
184
+ - proxy/compose.yaml
185
+ - proxy/traefik.yml
167
186
  - public/.gitkeep
168
187
  - public/logo.jpg
169
188
  - public/logo.pxm