capistrano-addon-fm 0.1.2 → 0.1.4

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: 3bd77cf936fe7b355ceef1d43344d55af39f0040afaebdc441154e2571df8280
4
- data.tar.gz: 6430cd5a453b92599abe528d09fdac247719f1bcca27a9d6e8ed93fd42aecef3
3
+ metadata.gz: 334ec6e155c84a16a1ef01dd5d5690dac733f0d6b9be61179226ae5a25804531
4
+ data.tar.gz: 613cb974e55564802a58db41882838d622693fb91892b7e21bcdb47d915df59a
5
5
  SHA512:
6
- metadata.gz: c6e61dc7bab5dfe662f80b1ecc857c9f4241bf2f8ade82f42122ef3676edd221411fd4de924ccd4de553ff513b450ce5f26a0a8e0c9de298d8a09d2bb417dfa4
7
- data.tar.gz: d7f8490624c7f01adbb261cc159e335f27c87aa42fc140e1b96c6fa94dc0466120ce4a8cc215542e2b4de32796926de01ebd696bd10a5143dc5f2e253c73d311
6
+ metadata.gz: 27a03eea721ae51d58e143e716e26981972fd312ec82caefeb6e4412c3f454ed8f4df866e113cdd27debd5498f6724210e662069483a10b5c9ec325eb2c6a456
7
+ data.tar.gz: ae2795ee3834162a4a41a802257b14ab27f197aaf9c38c61a38360b0c095b5a099b12f3a948227f5e404486b6c02ebace3d36ceba3ecc1abef3985e947e18eeb
data/CHANGELOG.md CHANGED
@@ -1,9 +1,26 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.1.4] - 2026-06-20
5
+ ### Added
6
+ - add `cap fm:version` task that will output addon readme file
7
+ - env-with-secrets : add 2 new tasks : `env:set` and `env:set:diff` - same as `env:upload`/`env:upload:diff` but with remote instead of local .env.smth file
8
+
9
+ ## [0.1.3] - 2025-08-26
10
+ ### Added
11
+ - fix env-with-secrets : fix release_path (latest)
12
+ - add `cap fm:readme` task that will output addon readme file
13
+ - add `cap fm:readme:tasks` task that will output addon readme file - only tasks part
14
+ - improved readme.md docs
15
+
16
+ ## [0.1.2] - 2025-02-18
17
+ ### Added
18
+ - fix env-with-secrets; add missing php-fpm README text
19
+
4
20
  ## [0.1.1] - 2025-02-18
5
21
  ### Added
6
22
  - add php-fpm tasks
7
- ## [0.1.0] - 2025-02-18
23
+
24
+ ## [0.1.0] - 2025-02-17
8
25
  ### Added
9
26
  - add generic tasks - documented in README.md
data/README.md CHANGED
@@ -17,6 +17,10 @@ require 'capistrano/addon/fm'
17
17
  ## Usage
18
18
 
19
19
  ### this will add new tasks for `cap` command
20
+ #### addon related commands (no stage needed):
21
+ cap fm:version Will output this readme file
22
+ cap fm:readme Will output this readme file
23
+ cap fm:readme:tasks Will output this readme file - only Usage block
20
24
  new tasks (example run: cap prod TASK - replace 'prod' with your stage (devel/local/etc))
21
25
  #### supervisor related commands:
22
26
  cap prod supervisor:start Will run supervisorctl `start all`
@@ -57,11 +61,13 @@ new tasks (example run: cap prod TASK - replace 'prod' with your stage (devel/lo
57
61
  cap prod system:disk_space: all|df|zfs|btrfs
58
62
  cap prod system:connections:count: total|per_address|via_ss
59
63
  #### env-with-secrets:
60
- cap env:upload Will upload .env file to server and decrypt
61
- cap env:upload:diff Will run `diff` command to server's .env versus local .env - decrypted
62
- cap env:local:encrypt_file Will encrypt `cap-secrets-LOCAL.txt` to `ap-secrets.enc.b64`
63
- cap env:local:decrypt_file Will decrypt `ap-secrets.enc.b64` into `cap-secrets-LOCAL.txt`
64
- cap env:local:secrets cat `cap-secrets-LOCAL.txt`
64
+ cap prod env:set Will set server's .env.smth file to server's .env and decrypt
65
+ cap prod env:set:diff Will run `diff` command to server's .env versus server's .env.smth - decrypted
66
+ cap prod env:upload Will upload .env file to server and decrypt
67
+ cap prod env:upload:diff Will run `diff` command to server's .env versus local .env - decrypted
68
+ cap prod env:local:encrypt_file Will encrypt `cap-secrets-LOCAL.txt` to `ap-secrets.enc.b64`
69
+ cap prod env:local:decrypt_file Will decrypt `ap-secrets.enc.b64` into `cap-secrets-LOCAL.txt`
70
+ cap prod env:local:secrets cat `cap-secrets-LOCAL.txt`
65
71
  #### custom related commands:
66
72
  cap prod cat:env Run `cat /var/www/*/*/.env`
67
73
  cap prod empty_file:check Run `la -lah on nginx, fpm, laravel and var/www/*/current/logs/*`
@@ -0,0 +1 @@
1
+ set :stage, :'fm-addon-stage'
@@ -7,6 +7,24 @@ namespace "env" do
7
7
  set :default_file_to_decrypt, 'cap-secrets.enc.b64'
8
8
  set :default_encryption_key_file, 'cap-secrets-encryption-key-LOCAL.txt'
9
9
 
10
+
11
+ # set .env to server (.env.tmp copied to .env)
12
+ task "set" do
13
+ invoke "env:set_remote_env_file"
14
+ invoke! "env:decrypt_remote_env_tmp_file"
15
+ on roles(:app) do
16
+ execute "cd #{shared_path} && cp .env.tmp .env", raise_on_non_zero_exit: false
17
+ end
18
+ end
19
+ # compares server .env with server .env (via .env.tmp)
20
+ task "set:diff" do
21
+ invoke "env:set_remote_env_file"
22
+ invoke! "env:decrypt_remote_env_tmp_file"
23
+ on roles(:app) do
24
+ execute "cd #{shared_path} && diff .env .env.tmp", raise_on_non_zero_exit: false
25
+ end
26
+ end
27
+
10
28
  # uploads .env to server (.env.tmp copied to .env)
11
29
  task "upload" do
12
30
  invoke! "env:local:check:files:exist"
@@ -35,6 +53,13 @@ namespace "env" do
35
53
  end
36
54
  end
37
55
  end
56
+ # set remote env to server (.env.tmp) - does not decrypt
57
+ task "set_remote_env_file" do
58
+ on roles(:app) do |host|
59
+ latest_release_path = "#{shared_path.sub(/shared$/, 'releases')}/#{capture("ls -1 #{shared_path.sub(/shared$/, 'releases')} | sort -r | head -n 1").strip}"
60
+ execute "cp #{latest_release_path}/#{host.properties.env_file_location} #{shared_path}/.env.tmp"
61
+ end
62
+ end
38
63
  # decrypt .env file on server (encrypted .env.tmp to decrypted .env.tmp)
39
64
  task "decrypt_remote_env_tmp_file" do
40
65
  on roles(:app) do
@@ -42,6 +67,7 @@ namespace "env" do
42
67
  base64_file = fetch(:file_to_decrypt, fetch(:default_file_to_decrypt))
43
68
  encrypted_file = base64_file.gsub('.b64', '')
44
69
  decrypted_file_tmp = "cap-secrets-tmp.txt"
70
+ latest_release_path = "#{shared_path.sub(/shared$/, 'releases')}/#{capture("ls -1 #{shared_path.sub(/shared$/, 'releases')} | sort -r | head -n 1").strip}"
45
71
 
46
72
  # Read the .env file
47
73
  env_file = capture(:cat, "#{shared_path}/.env.tmp")
@@ -50,7 +76,7 @@ namespace "env" do
50
76
  encryption_key = File.read(encryption_key_file).strip
51
77
 
52
78
  # Decode and decrypt cap-secrets.enc.b64 into a temporary file cap-secrets-tmp.txt
53
- execute "base64 -d #{release_path}/#{base64_file} > #{shared_path}/#{encrypted_file} && openssl enc -aes-256-cbc -d -pbkdf2 -in #{shared_path}/#{encrypted_file} -out #{shared_path}/#{decrypted_file_tmp} -pass pass:#{encryption_key}"
79
+ execute "base64 -d #{latest_release_path}/#{base64_file} > #{shared_path}/#{encrypted_file} && openssl enc -aes-256-cbc -d -pbkdf2 -in #{shared_path}/#{encrypted_file} -out #{shared_path}/#{decrypted_file_tmp} -pass pass:#{encryption_key}"
54
80
 
55
81
  # Read the secrets from the temporary cap-secrets-tmp.txt file
56
82
  secrets = {}
@@ -136,7 +162,7 @@ namespace "env" do
136
162
  use_local_path = fetch(:local_path, fetch(:default_local_path))
137
163
  Dir.chdir(use_local_path) do
138
164
  file = fetch(:file_to_encrypt, fetch(:default_file_to_encrypt))
139
- puts "Contents of file #{use_local_path}/#{file}:\n\n"
165
+ puts "Contents of file #{use_local_path}#{file}:\n\n"
140
166
  system("cat #{file}")
141
167
  end
142
168
  end
@@ -3,7 +3,7 @@
3
3
  module Capistrano
4
4
  module Addon
5
5
  module Fm
6
- VERSION = "0.1.2"
6
+ VERSION = "0.1.4"
7
7
  end
8
8
  end
9
9
  end
@@ -2,6 +2,9 @@
2
2
 
3
3
  require_relative "fm/version"
4
4
 
5
+ load File.expand_path("fm/stages/fm-addon-stage.rb", __dir__)
6
+ # set :stage, :'fm-addon-stage' unless fetch(:stage, nil)
7
+
5
8
  # Load all .rake files from the tasks directory
6
9
  Dir.glob(File.expand_path("./fm/tasks/**/*.rake", __dir__)).each { |r| load r }
7
10
 
@@ -13,3 +16,35 @@ module Capistrano
13
16
  end
14
17
  end
15
18
  end
19
+
20
+ namespace 'fm' do
21
+ task 'version' do
22
+ run_locally do
23
+ gem_root = File.expand_path('./', __dir__)
24
+ Dir.chdir(gem_root) do
25
+ system('cat fm/version.rb | grep VERSION')
26
+ end
27
+ end
28
+ end
29
+ task 'readme' do
30
+ run_locally do
31
+ gem_root = File.expand_path('../../../', __dir__)
32
+ Dir.chdir(gem_root) do
33
+ system('cat readme.md')
34
+ end
35
+ end
36
+ end
37
+ task 'readme:tasks' do
38
+ run_locally do
39
+ gem_root = File.expand_path('../../../', __dir__)
40
+ Dir.chdir(gem_root) do
41
+ system("awk '
42
+ /^## Usage$/ { print; in_section=1; next }
43
+ /^## Configuration$/ { exit }
44
+ in_section { print }
45
+ ' README.md
46
+ ")
47
+ end
48
+ end
49
+ end
50
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-addon-fm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florin Motoc
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-02-18 00:00:00.000000000 Z
11
+ date: 2026-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -38,6 +38,7 @@ files:
38
38
  - Rakefile
39
39
  - lib/capistrano/addon.rb
40
40
  - lib/capistrano/addon/fm.rb
41
+ - lib/capistrano/addon/fm/stages/fm-addon-stage.rb
41
42
  - lib/capistrano/addon/fm/tasks/custom.rake
42
43
  - lib/capistrano/addon/fm/tasks/env-with-secrets.rake
43
44
  - lib/capistrano/addon/fm/tasks/fpm.rake