Skip to content

Instantly share code, notes, and snippets.

#!/usr/bin/env zx
const k8sConfigPath = requiredString(argv, 'config')
process.env.KUBECONFIG = path.resolve(__dirname, k8sConfigPath)
const targets = argv._
const manifests = targets.flatMap((filePath) => {
return YAML.parseAllDocuments(fs.readFileSync(filePath).toString()).map((doc) => ({
file: filePath, manifest: doc.toJSON(),
@sisisin
sisisin / without_id_model.rb
Last active March 18, 2021 02:38
without_id_model.rb
# frozen_string_literal: true
require 'bundler/inline'
gemfile(true) do
source 'https://rubygems.org'
gem 'activerecord'
gem 'sqlite3'
end
# frozen_string_literal: true
require 'json'
circle_token = ENV.fetch('CIRCLE_CI_USER_TOKEN')
workflow_id = ENV.fetch('CIRCLE_WORKFLOW_ID')
result = JSON.parse `curl -u #{circle_token}: https://circleci.com/api/v2/workflow/#{workflow_id}`
pipeline_id = result['pipeline_id']
workflows = JSON.parse `curl -u #{circle_token}: https://circleci.com/api/v2/pipeline/#{pipeline_id}/workflow`
deploy_workflow = workflows.select { _1['name'] == 'deploy' }
# frozen_string_literal: true
require 'bundler/inline'
gemfile(true) do
source 'https://rubygems.org'
gem 'activerecord'
gem 'sqlite3'
end
@sisisin
sisisin / cli.rb
Created February 8, 2021 08:10
CLI implementation template using Ruby
require 'optparse'
class Cli
def initialize
@opts = {}
@available_commands = %w[foo]
OptionParser.new do |parser|
parser.banner = "Usage: cli"
parser.on('-d', '--dry-run', 'Dry run')
@sisisin
sisisin / enum.rb
Last active November 3, 2020 08:24
# frozen_string_literal: true
# ref: https://stackoverflow.com/questions/1461286/advanced-java-like-enums-in-ruby
class MyEnum
attr_accessor :value
def initialize(value)
@value = value
freeze
end
import readline from 'readline';
import minimist from 'minimist';
import { exec, ExecOptions } from 'child_process';
function getLogTimeString() {
const now = new Date();
const formatter = new Intl.DateTimeFormat('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
type Cons<X, XS extends any[]> = ((h: X, ...args: XS) => void) extends (...args: infer R) => void ? R : [];
class PathBuilder<T extends [] | [string, ...string[]] = []> {
add<P extends string>(path: P): PathBuilder<Cons<P, T>> {
return this as any;
}
build(): Path<T> {
return new Path(this);
}
@sisisin
sisisin / generateTypelessImplements.ts
Created October 23, 2019 19:45
既存のredux-aggregateによるreducer,action creator実装からtypeless reducer,action creator実装を生成する
/* eslint-disable */
import path from 'path';
import { CallExpression, MethodDeclaration, Node, Project, SourceFile, TypeGuards } from 'ts-morph';
function createProject() {
return new Project({ tsConfigFilePath: path.join(process.cwd(), 'tsconfig.json') });
}
// entory point
import { useAppActions } from 'hooks/useAppDispatch';
import React, { useEffect } from 'react';
export const Component = () => {
// ActionCreatorの集合を持ったオブジェクトを渡すとdispatch関数にラップされて返ってくる
const { initialize } = useAppActions(componentAggregate.creators);
useEffect(() => {
initialize();
}, [initialize]);