OSDN Git Service

initial revision of the `nodejs_utils` cookbook. nodejs_utils-0.1.0
authorwhitestar <whitestar@users.osdn.me>
Sun, 3 Dec 2017 07:10:08 +0000 (16:10 +0900)
committerwhitestar <whitestar@users.osdn.me>
Sun, 3 Dec 2017 07:10:08 +0000 (16:10 +0900)
21 files changed:
cookbooks/nodejs_utils/.foodcritic [new file with mode: 0644]
cookbooks/nodejs_utils/.rubocop.yml [new file with mode: 0644]
cookbooks/nodejs_utils/Berksfile [new file with mode: 0644]
cookbooks/nodejs_utils/CHANGELOG.md [new file with mode: 0644]
cookbooks/nodejs_utils/Gemfile [new file with mode: 0644]
cookbooks/nodejs_utils/README.md [new file with mode: 0644]
cookbooks/nodejs_utils/Rakefile [new file with mode: 0644]
cookbooks/nodejs_utils/attributes/default.rb [new file with mode: 0644]
cookbooks/nodejs_utils/concourse.yml [new file with mode: 0644]
cookbooks/nodejs_utils/fly-vars.yml [new file with mode: 0644]
cookbooks/nodejs_utils/metadata.rb [new file with mode: 0644]
cookbooks/nodejs_utils/recipes/default.rb [new file with mode: 0644]
cookbooks/nodejs_utils/recipes/n-installer.rb [new file with mode: 0644]
cookbooks/nodejs_utils/recipes/nvm-installer.rb [new file with mode: 0644]
cookbooks/nodejs_utils/spec/recipes/default_spec.rb [new file with mode: 0644]
cookbooks/nodejs_utils/spec/spec_helper.rb [new file with mode: 0644]
cookbooks/nodejs_utils/templates/default/usr/local/bin/n_install [new file with mode: 0644]
cookbooks/nodejs_utils/templates/default/usr/local/bin/n_uninstall [new file with mode: 0644]
cookbooks/nodejs_utils/templates/default/usr/local/bin/n_update [new file with mode: 0644]
cookbooks/nodejs_utils/templates/default/usr/local/bin/nvm_install [new file with mode: 0644]
cookbooks/nodejs_utils/version [new file with mode: 0644]

diff --git a/cookbooks/nodejs_utils/.foodcritic b/cookbooks/nodejs_utils/.foodcritic
new file mode 100644 (file)
index 0000000..3907cff
--- /dev/null
@@ -0,0 +1 @@
+~FC001
diff --git a/cookbooks/nodejs_utils/.rubocop.yml b/cookbooks/nodejs_utils/.rubocop.yml
new file mode 100644 (file)
index 0000000..4de4294
--- /dev/null
@@ -0,0 +1,53 @@
+AllCops:
+  Exclude:
+    - vendor/**/*
+
+AlignParameters:
+  Enabled: false
+LineLength:
+  Enabled: false
+Lint/UnusedBlockArgument:
+  Enabled: false
+Metrics/AbcSize:
+  Enabled: false
+Style/BlockComments:
+  Enabled: false
+Style/BlockDelimiters:
+  Enabled: false
+Style/ExtraSpacing:
+  Enabled: false
+Style/FileName:
+  Enabled: false
+Style/LeadingCommentSpace:
+  Enabled: false
+Style/RescueModifier:
+  Enabled: false
+Style/SpaceAroundOperators:
+  Enabled: false
+Style/SpaceBeforeFirstArg:
+  Enabled: false
+Style/SpaceInsideBlockBraces:
+  Enabled: false
+Style/SpaceInsidePercentLiteralDelimiters:
+  Enabled: false
+Style/TrailingCommaInLiteral:
+  EnforcedStyleForMultiline: consistent_comma
+Style/WordArray:
+  Enabled: false
+
+#Lint/ShadowingOuterLocalVariable:
+#  Enabled: false
+#Metrics/MethodLength:
+#  Max: 10
+#Metrics/ModuleLength:
+#  Max: 100
+#Metrics/CyclomaticComplexity:
+#  Max: 6
+#Metrics/PerceivedComplexity:
+#  Max: 7
+#Style/AccessorMethodName:
+#  Enabled: false
+#Style/MultilineOperationIndentation:
+#  Enabled: false
+#Style/PerlBackrefs:
+#  Enabled: false
diff --git a/cookbooks/nodejs_utils/Berksfile b/cookbooks/nodejs_utils/Berksfile
new file mode 100644 (file)
index 0000000..9da25d9
--- /dev/null
@@ -0,0 +1,19 @@
+#
+# Copyright 2017 whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+source 'https://supermarket.chef.io'
+
+metadata
diff --git a/cookbooks/nodejs_utils/CHANGELOG.md b/cookbooks/nodejs_utils/CHANGELOG.md
new file mode 100644 (file)
index 0000000..0801015
--- /dev/null
@@ -0,0 +1,5 @@
+# nodejs_utils CHANGELOG
+
+0.1.0
+-----
+- Initial release.
diff --git a/cookbooks/nodejs_utils/Gemfile b/cookbooks/nodejs_utils/Gemfile
new file mode 100644 (file)
index 0000000..ad84be7
--- /dev/null
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+
+# with Chef DK
+gem 'stove'
diff --git a/cookbooks/nodejs_utils/README.md b/cookbooks/nodejs_utils/README.md
new file mode 100644 (file)
index 0000000..2b3a5c0
--- /dev/null
@@ -0,0 +1,73 @@
+nodejs_utils Cookbook
+=====================
+
+This cookbook installs `n`, `nvm` (Node.js Version Managers) setup scripts.
+
+## Contents
+
+- [Requirements](#requirements)
+    - [platforms](#platforms)
+    - [packages](#packages)
+    - [cookbooks](#cookbooks)
+- [Attributes](#attributes)
+- [Usage](#usage)
+    - [Recipes](#recipes)
+        - [nodejs_utils::default](#nodejs_utilsdefault)
+        - [nodejs_utils::n-installer](#nodejs_utilsn-installer)
+        - [nodejs_utils::nvm-installer](#nodejs_utilsnvm-installer)
+- [License and Authors](#license-and-authors)
+
+## Requirements
+
+### platforms
+- Debian >= 8.0
+- Ubuntu >= 14.04
+- CentOS, RHEL >= 7.3
+
+### packages
+- none.
+
+### cookbooks
+- none.
+
+## Attributes
+
+|Key|Type|Description, example|Default|
+|:--|:--|:--|:--|
+|`['nodejs_utils']['nvm']['version']`|String|latest: 'master'|`'v0.33.6'`|
+
+## Usage
+
+### Recipes
+
+#### nodejs_utils::default
+
+This recipe does nothing.
+
+#### nodejs_utils::n-installer
+
+This recipe installs the `n` setup script.
+
+#### nodejs_utils::nvm-installer
+
+This recipe installs the `nvm` setup script.
+
+## License and Authors
+
+- Author:: whitestar at osdn.jp
+
+```text
+Copyright 2017, whitestar
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+```
diff --git a/cookbooks/nodejs_utils/Rakefile b/cookbooks/nodejs_utils/Rakefile
new file mode 100644 (file)
index 0000000..64191a5
--- /dev/null
@@ -0,0 +1,41 @@
+require 'rspec/core/rake_task'
+require 'rubocop/rake_task'
+require 'foodcritic'
+require 'stove/rake_task'
+
+namespace :style do
+  desc 'Run Ruby style checks'
+  RuboCop::RakeTask.new(:ruby) do |t|
+    t.options = [
+      '--auto-gen-config',  # creates .rubocop_todo.yml
+    ]
+  end
+
+  desc 'Run Chef style checks'
+  FoodCritic::Rake::LintTask.new(:chef) do |t|
+    t.options = {
+      fail_tags: ['any'],
+    }
+  end
+end
+
+desc 'Run all style checks'
+task style: ['style:chef', 'style:ruby']
+
+desc 'Run ChefSpec examples'
+RSpec::Core::RakeTask.new(:spec)
+
+desc 'Publish cookbook'
+Stove::RakeTask.new(:publish) do |t|
+  t.stove_opts = [
+    # `--username` and `--key` are set in ~/.stove typically.
+    #'--username', 'somebody',
+    #'--key', '~/chef/chef.io.example.com/somebody.pem',
+    #'--endpoint', 'https://supermarket.io.example.com/api/v1',  # default: supermarket.chef.io
+    #'--no-ssl-verify',
+    '--no-git',
+    '--log-level', 'info',
+  ]
+end
+
+task default: ['style', 'spec']
diff --git a/cookbooks/nodejs_utils/attributes/default.rb b/cookbooks/nodejs_utils/attributes/default.rb
new file mode 100644 (file)
index 0000000..b5456fb
--- /dev/null
@@ -0,0 +1,20 @@
+#
+# Cookbook Name:: nodejs_utils
+# Attributes:: default
+#
+# Copyright 2017, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+default['nodejs_utils']['nvm']['version'] = 'v0.33.6'  # latest: 'master'
diff --git a/cookbooks/nodejs_utils/concourse.yml b/cookbooks/nodejs_utils/concourse.yml
new file mode 100644 (file)
index 0000000..d4a712c
--- /dev/null
@@ -0,0 +1,100 @@
+---
+# $ fly -t target sp -p nodejs_utils-cookbook -c concourse.yml -l fly-vars.yml -l ~/sec/credentials-prod.yml
+resources:
+- name: src-git
+  type: git
+  source:
+    uri: ((git-id-osdn))@git.osdn.net:/gitroot/metasearch/grid-chef-repo.git
+    branch: master
+    paths:
+    - cookbooks/((cookbook-name))
+    private_key: ((git-private-key))
+    git_user: ((git-user-osdn))
+  #check_every: 1h  # default: 1m
+- name: chefdk-cache
+  type: docker-image
+  source:
+    repository: chef/chefdk
+    tag: ((chefdk-version))
+    # ((param)) style: fly >= 3.2.0
+    registry_mirror: https://((registry-mirror-domain))  # e.g. https://registry.docker.example.com:5000
+    ca_certs:
+    - domain: ((registry-mirror-domain))  # e.g. registry.docker.example.com:5000
+      cert: ((docker-reg-ca-cert))
+  check_every: 12h  # default: 1m
+
+jobs:
+- name: test-cookbook
+  plan:
+  - aggregate:
+    - get: src-git
+      params:
+        depth: 5
+      trigger: true
+    - get: chefdk-cache
+  - task: ci-build
+    image: chefdk-cache
+    params:
+      http_proxy: ((http-proxy))  # e.g. http://proxy.example.com:3128
+      #HTTP_PROXY: ((http-proxy))
+    config:
+      platform: linux
+      #image_resource:
+      #  type: docker-image
+      #  source:
+      #    repository: chef/chefdk
+      #    tag: ((chefdk-version))
+          # NG, setting disable
+          #registry_mirror: https://((registry-mirror-domain))
+          #ca_certs:
+          #- domain: ((registry-mirror-domain))
+          #  cert: ((docker-reg-ca-cert))
+      inputs:
+      - name: src-git
+      run:
+        #dir: ./src-git/cookbooks/((cookbook-name))
+        #path: rake
+        path: /bin/bash
+        args:
+        - -c
+        - |
+          cd ./src-git/cookbooks/((cookbook-name))
+          bundle install
+          rake
+- name: publish-cookbook
+  plan:
+  - aggregate:
+    - get: src-git
+      params:
+        depth: 5
+      trigger: false
+      passed: [test-cookbook]
+    - get: chefdk-cache
+      passed: [test-cookbook]
+  - task: publish
+    image: chefdk-cache
+    params:
+      http_proxy: ((http-proxy))
+      chef_username: ((chef-username))
+      chef_client_key: ((chef-client-key))
+    config:
+      platform: linux
+      inputs:
+      - name: src-git
+      run:
+        path: /bin/bash
+        args:
+        - -c
+        - |
+          echo '{"username":"((chef-username))","key":"/root/chef-client-key.pem"}' > /root/.stove
+          echo "$chef_client_key"  > /root/chef-client-key.pem
+          cd ./src-git/cookbooks/((cookbook-name))
+          bundle install
+          rake publish
+  - put: src-git
+    params:
+      repository: src-git
+      tag_prefix: ((cookbook-name))-
+      tag: src-git/cookbooks/((cookbook-name))/version
+      only_tag: true
+      annotate: ../src-git/cookbooks/((cookbook-name))/version
diff --git a/cookbooks/nodejs_utils/fly-vars.yml b/cookbooks/nodejs_utils/fly-vars.yml
new file mode 100644 (file)
index 0000000..543ec12
--- /dev/null
@@ -0,0 +1,3 @@
+---
+cookbook-name: nodejs_utils
+chefdk-version: 1.4.3
diff --git a/cookbooks/nodejs_utils/metadata.rb b/cookbooks/nodejs_utils/metadata.rb
new file mode 100644 (file)
index 0000000..8b672b7
--- /dev/null
@@ -0,0 +1,17 @@
+name             'nodejs_utils'
+maintainer       'whitestar'
+maintainer_email ''
+license          'Apache 2.0'
+description      'Installs/Configures nodejs_utils'
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version          IO.read(File.join(File.dirname(__FILE__), 'version')).chomp
+source_url       'http://scm.osdn.jp/gitroot/metasearch/grid-chef-repo.git'
+issues_url       'https://osdn.jp/projects/metasearch/ticket'
+
+chef_version     '>= 12'
+%w(centos redhat).each do |os|
+  supports os, '>= 7.3'
+end
+
+supports 'debian', '>= 8.0'
+supports 'ubuntu', '>= 14.04'
diff --git a/cookbooks/nodejs_utils/recipes/default.rb b/cookbooks/nodejs_utils/recipes/default.rb
new file mode 100644 (file)
index 0000000..2b36b78
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Cookbook Name:: nodejs_utils
+# Recipe:: default
+#
+# Copyright 2017, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
diff --git a/cookbooks/nodejs_utils/recipes/n-installer.rb b/cookbooks/nodejs_utils/recipes/n-installer.rb
new file mode 100644 (file)
index 0000000..eb3dc30
--- /dev/null
@@ -0,0 +1,64 @@
+#
+# Cookbook Name:: nodejs_utils
+# Recipe:: n-installer
+#
+# Copyright 2017, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+doc_url = 'https://github.com/tj/n'
+
+[
+  'curl',
+].each {|pkg|
+  resources(package: pkg) rescue package pkg do
+    action :install
+  end
+}
+
+[
+  'n_install',
+  #'n_update',
+  #'n_uninstall',
+].each {|script|
+  template "/usr/local/bin/#{script}" do
+    source  "usr/local/bin/#{script}"
+    owner 'root'
+    group 'root'
+    mode '0755'
+    action :create
+  end
+}
+
+log 'n-installer post install message' do
+  message <<-"EOM"
+Note: You must execute the following command manually.
+    See #{doc_url}
+    * install n:
+      $ n_install
+      ...
+      $ source .bashrc
+      $ n -V
+      2.1.8
+    * install the latest LTS Node.js
+      $ n lts
+      ...
+      $ node -v
+      v6.11.4
+    * update n:
+      $ n-update
+    * uninstall n:
+      $ n-uninstall
+EOM
+end
diff --git a/cookbooks/nodejs_utils/recipes/nvm-installer.rb b/cookbooks/nodejs_utils/recipes/nvm-installer.rb
new file mode 100644 (file)
index 0000000..cf5cea1
--- /dev/null
@@ -0,0 +1,58 @@
+#
+# Cookbook Name:: nodejs_utils
+# Recipe:: nvm-installer
+#
+# Copyright 2017, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+doc_url = 'https://github.com/creationix/nvm'
+
+[
+  'curl',
+].each {|pkg|
+  resources(package: pkg) rescue package pkg do
+    action :install
+  end
+}
+
+[
+  'nvm_install',
+].each {|script|
+  template "/usr/local/bin/#{script}" do
+    source  "usr/local/bin/#{script}"
+    owner 'root'
+    group 'root'
+    mode '0755'
+    action :create
+  end
+}
+
+log 'nvm-installer post install message' do
+  message <<-"EOM"
+Note: You must execute the following command manually.
+    See #{doc_url}
+    * install n:
+      $ nvm_install
+      ...
+      $ source .bashrc
+      $ nvm --version
+      0.33.6
+    * install the latest LTS Node.js
+      $ nvm install --lts
+      ...
+      $ node -v
+      v6.11.4
+EOM
+end
diff --git a/cookbooks/nodejs_utils/spec/recipes/default_spec.rb b/cookbooks/nodejs_utils/spec/recipes/default_spec.rb
new file mode 100644 (file)
index 0000000..df7aef0
--- /dev/null
@@ -0,0 +1,9 @@
+require_relative '../spec_helper'
+
+describe 'nodejs_utils::default' do
+  let(:chef_run) { ChefSpec::SoloRunner.new.converge(described_recipe) }
+
+  #it 'does something' do
+  #  expect(chef_run).to do_something('...')
+  #end
+end
diff --git a/cookbooks/nodejs_utils/spec/spec_helper.rb b/cookbooks/nodejs_utils/spec/spec_helper.rb
new file mode 100644 (file)
index 0000000..1995e2b
--- /dev/null
@@ -0,0 +1,25 @@
+# Added by ChefSpec
+require 'chefspec'
+
+# Uncomment to use ChefSpec's Berkshelf extension
+# require 'chefspec/berkshelf'
+
+RSpec.configure do |config|
+  # Specify the path for Chef Solo to find cookbooks
+  # config.cookbook_path = '/var/cookbooks'
+
+  # Specify the path for Chef Solo to find roles
+  # config.role_path = '/var/roles'
+
+  # Specify the Chef log_level (default: :warn)
+  # config.log_level = :debug
+
+  # Specify the path to a local JSON file with Ohai data
+  # config.path = 'ohai.json'
+
+  # Specify the operating platform to mock Ohai data from
+  # config.platform = 'ubuntu'
+
+  # Specify the operating version to mock Ohai data from
+  # config.version = '12.04'
+end
diff --git a/cookbooks/nodejs_utils/templates/default/usr/local/bin/n_install b/cookbooks/nodejs_utils/templates/default/usr/local/bin/n_install
new file mode 100644 (file)
index 0000000..91d99b2
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+PATH=.:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
+
+curl -L https://git.io/n-install | bash
diff --git a/cookbooks/nodejs_utils/templates/default/usr/local/bin/n_uninstall b/cookbooks/nodejs_utils/templates/default/usr/local/bin/n_uninstall
new file mode 100644 (file)
index 0000000..8a06acf
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+PATH=.:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
+
+curl -L https://raw.githubusercontent.com/mklement0/n-install/stable/bin/n-uninstall | bash
diff --git a/cookbooks/nodejs_utils/templates/default/usr/local/bin/n_update b/cookbooks/nodejs_utils/templates/default/usr/local/bin/n_update
new file mode 100644 (file)
index 0000000..7d846b6
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+PATH=.:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
+
+curl -L https://raw.githubusercontent.com/mklement0/n-install/stable/bin/n-update | bash
diff --git a/cookbooks/nodejs_utils/templates/default/usr/local/bin/nvm_install b/cookbooks/nodejs_utils/templates/default/usr/local/bin/nvm_install
new file mode 100644 (file)
index 0000000..0aafa30
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+PATH=.:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
+
+curl -o- https://raw.githubusercontent.com/creationix/nvm/<%= node['nodejs_utils']['nvm']['version'] %>/install.sh | bash
diff --git a/cookbooks/nodejs_utils/version b/cookbooks/nodejs_utils/version
new file mode 100644 (file)
index 0000000..6e8bf73
--- /dev/null
@@ -0,0 +1 @@
+0.1.0