mcpField
R
release

release

github.com/remotion-devクラウド・DevOps68.9k653 回インストール今日更新
リポジトリ

release について

Remotion monorepo のリリース手順を詳しく定めたスキルです。認証、ビルドとバージョン設定、npm パッケージの検証とタグ昇格、後続の公開を扱い、実行条件やロールバック、変更履歴の承認も定義します。

主な機能

  1. 01リリース認証と環境の確認
  2. 02パッケージのビルドとバージョン設定
  3. 03一時 npm タグでのパッケージ公開
  4. 04latest 昇格前のパッケージ検証
  5. 05一部昇格時の復旧とロールバック
  6. 06変更履歴の準備と承認

活用シーン

  1. 01Remotion monorepo リリースの準備
  2. 02昇格前の npm パッケージ公開確認
  3. 03タグの一部昇格後の復旧
  4. 04承認用リリースノートの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/remotion-dev/remotion --skill release

インストール後、Claude Code で/releaseを入力して読み込まれたか確認します。

詳細

  • 実行中の可能性がある turbo プロセスをすべて SIGKILL で終了します。
  • リリースを開始する前に、gcloud auth print-access-token >/dev/null を実行して gcloud にログイン済みであることを確認します。失敗した場合は gcloud auth login を実行してから、確認を繰り返します。この確認が成功するまではリリースを続行しないでください。
  • Codex 固有:リリースコマンドを実行する前に、macOS のシステム Ruby より rbenv が優先されることを確認します。Codex は非対話シェルを起動する際、~/.rbenv/shims より /usr/bin が先になることがあり、ユーザーのターミナルでは Ruby 3.3.x が使われていても Ruby 2.6 が使われる場合があります。Ruby/Bundler を呼び出す可能性のあるリリースコマンドは、次のように実行します。 PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" <command> PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" ruby --version で確認します。/usr/bin/ruby ではなく、ユーザーの rbenv Ruby が使われている必要があります。lambda Ruby パッケージが現在、Ruby >= 2.7 を必要とする json などの gem を解決するため、これは重要です。
  • npm whoami を確認します。失敗した場合に限り、npm login を実行します(ブラウザーでの 2FA は手動で行います)。
  • NPM のパスワードを取得するには、op item get "Npmjs" --fields password --reveal --account remotiondev.1password.com を使用します。
  • 2FA 用のワンタイムパスワードを取得するには、op item get "Npmjs" --otp --account remotiondev.1password.com を使用します。
  • npm token create --name="PublishRemotionXXXXXX" --packages "remotion" --packages "create-video" --packages-and-scopes-permission read-write --bypass-2fa --scopes "@remotion" --otp=<otp> を実行します。XXXXXX は一意の名前になるようランダムな文字列に置き換えます。op item get "Npmjs" --otp --account remotiondev.1password.com で OTP を取得し、--otp= 経由で渡します。パスワードを求められたら、echo "$PASSWORD" | を使ってパスワードをパイプで渡します。
    • --json は渡さないでください。npm は JSON 出力でトークンを npm_*** とマスクするため、使用できなくなります。通常の出力をスクラッチパッド内のファイルにリダイレクトし、grep -oE 'npm_[A-Za-z0-9]{20,}' を使ってトークンをスクラッチパッドのファイル(例:$SP/npm_token)に抽出します。トークンは絶対に表示しないでください。トークンが使えないと判明した場合は、npm token list で ID を確認し、npm token revoke <id> --otp=<otp> で無効化します。
  • bun i を実行します。
  • bun run build を実行します。
  • npm view remotion version を実行して現在のバージョン番号を取得します。
  • 現在のバージョンに 1 を加えた値を <version> として、bun set-version.ts <version> を実行します。終了コードが 0 以外の場合は、リリースプロセス全体を直ちに中止します。出力を(たとえば tail に)パイプしないでください。シェルは zsh のため $PIPESTATUS が使えず、終了コードが失われます。代わりにログファイルにリダイレクトし、v<version> のコミットとタグが存在することを確認します。
  • cd packages/example && sh runlambda.sh && cd ../.. を実行します。失敗した場合はリリースを中止します。
  • 一時的な npm dist-tag を使って公開パッケージを公開し、すべてのパッケージがインストール可能になってから latest に昇格します。validating は通常の公開に対する npm の自動スキャンであり、npm stage を使う理由にはなりません。bun run release は実行しないでください。現在のスクリプトは latest に直接公開し、公開可能性の確認前に非公開パッケージの公開と Git のプッシュを開始します。
    • リポジトリのルートから、set-version.ts の実行後に次を実行します。

      releaseVersion=$(node -p "require('./packages/core/package.json').version")
      releaseTag="remotion-release-$(printf '%s' "$releaseVersion" | tr . -)"
      releaseManifest="/tmp/remotion-release-${releaseVersion}-packages.txt"
      bun publish.ts --list > "$releaseManifest"
      

      このマニフェストが、確認および昇格の対象となる正確なパッケージ一覧です。一部の昇格をロールバックできるよう、各パッケージの以前の latest タグを記録します。

    • マニフェスト内のいずれかのパッケージが npm に初めて公開されるかどうかを確認します。Bun は --tag を指定しても、パッケージの初回公開時に latest を追加します。新しいパッケージがある場合は、一括公開の前に停止し、それらの初回公開を別途計画してください。このフローでは、初回バージョンを latest から外すことはできません。

    • 上で作成したトークンを使用して NPM_CONFIG_TOKEN=<token> bun publish.ts --tag="$releaseTag" を実行します。Bun は引き続きパッケージをパックし、workspace: および catalog: 依存関係を書き換えます。このタグ付きパスは再公開エラーを許容しません。アップロードの成功は、npm のスキャンが完了した証拠にはなりません。マニフェスト、正確なパッケージバージョン、一時タグを確認してください。スキャンが保留中の間は、同じバージョンを再度アップロードしないでください。公開試行が失敗し、そのバージョンが存在しないことが確認された場合は、同じトークンを使用して bun publish.ts --tag="$releaseTag" --only=<package> でそのパッケージのみを再開してください。マニフェスト全体を盲目的に再実行しないでください。

    • マニフェスト内の各パッケージについて、プロモーションの前に npm view <package>@<version> version --json および npm pack <package>@<version> --pack-destination <temporary-directory> の成功を必須とします。pack チェックは、tarball を実際に取得できることを確認します。パッケージごとのチェックは while read -r p; do ( ... ) & done < "$releaseManifest"; wait ループで実行してください(「command line cannot be assembled」で失敗する xargs -I は使用しないでください)。公開直後は、およそ 3 分の 1 のパッケージがまだ validating であると想定してください。これには約 15 分かかっています。ポーリングループをスクリプトとして記述してバックグラウンドで実行し、その間に changelog を作成してください。未解決のパッケージを約 1 分に 1 回ポーリングします。利用可能な場合は npm lifecycle status API を使用してください: GET https://registry.npmjs.org/-/package/<encoded-package-name>/version/<version>/status を公開アクセス権で認証して使用します。@remotion%2Fwhisper-web のようにスコープ付き名を URL エンコードし、認証情報をログに残さないでください。パッケージが 1 時間経過しても validating のままである場合は、リリースを保留として報告し、すべての latest タグを前回のリリースのままにしてください。blocked、rejected、manual-review、missing、unknown の状態もプロモーションを停止します。これらをスキャンの遅延として扱わず、調査してください。

    • すべてのパッケージがインストール可能になったら、リリーストークンを使用して、マニフェスト内のすべてのパッケージに対して npm dist-tag add <package>@<version> latest を実行します。npm CLI は NPM_CONFIG_TOKEN を無視し(bun publish のみがこれを尊重します)、ログインセッションにフォールバックして EOTP で失敗します。代わりに次のようにトークンを渡してください: env "npm_config_//registry.npmjs.org/:_authToken=$TOKEN" npm dist-tag add ...。これはパッケージごとに 1 回のレジストリ操作です。npm には複数パッケージのアトミックなプロモーションはありません。すべてのパッケージについて npm view <package> dist-tags.latest --prefer-online がリリースバージョンと一致することを確認してください。並列チェックでは、一部のパッケージについて古いキャッシュされたタグが返されることがあります。失敗として扱う前に、不一致を順次再確認してください。プロモーションが途中で失敗した場合は、すでに変更されたパッケージについて記録された以前の latest タグを復元し、不完全なリリースとして報告してください。プロモーションの成功後、各パッケージから一時タグを削除し、最終的なタグを確認してください。リリーストークンは dist-tag rm で E403 を受け取るため、呼び出しごとに新しい OTP を使用してログインセッションを使用してください: npm dist-tag rm <package> <releaseTag> --otp=$(op item get "Npmjs" --otp --account remotiondev.1password.com)。OTP のロールオーバーにより呼び出しが失敗した場合は、30 秒待ってから 1 回再試行してください。

    • npm が明示的に E_STAGE_REQUIRED を返した場合、そのパッケージでは直接公開を利用できません。このリリースを停止し、ステージングされたワークフローを別途評価してください。ステージングされた承認にはパッケージごとに 2FA アクションが必要です。ステージングされたパッケージをこの直接公開フローに黙って混在させないでください。

  • 公開用のすべての latest タグを検証した後にのみ、リポジトリのルートから bunx turbo run publishprivate --concurrency=1 を実行し、続けて git push --tags と git push を実行します。いずれかの手順が失敗した場合は中止し、影響を受けたリリースの状態を報告してください。
  • 公開パッケージの昇格後、リポジトリのルートから bun run publishtemplates を実行して、すべてのテンプレートを再公開します。いずれかのテンプレートの公開に失敗した場合は、リリースワークフローを中止して、失敗を報告してください。
  • 変更履歴を markdown 形式で生成し、/tmp/release-<version>.md に保存します。
    • git log v<previous_version>..v<new_version> --oneline を実行して、すべてのコミットを取得します
    • マージコミットから PR 番号を抽出します
    • 各 PR について、gh pr view <number> --json title,author,number,url --jq '"* \(.title) by @\(.author.login) in \(.url)"' を実行します
    • PR を「What's Changed」、「Templates」、「Docs」、「Internal」のセクションに分類します
    • 前回のリリースで「Elements」と「Internal and Experimental」のセクションが使われている場合は、それらも使用します
    • 「What's Changed」では、主要な機能(特に新しいドキュメントページを伴うもの)を先頭に置き、同じパッケージの項目が隣り合うように並べ替えます(小見出しは使わず、並べ替えのみとします)。remotion コアパッケージの変更を先頭に置きます
    • PR のタイトルから冗長な接頭辞を削除します(例:「Docs」セクションの項目から「Docs:」を削除)
    • PR に新しいドキュメントページが追加されている項目にはリンクを設定します。git diff --diff-filter=A --name-only v<previous_version>..v<new_version> -- 'packages/docs/docs/**/*.mdx' 'packages/docs/docs/**/*.md' を実行して追加されたドキュメントページを一覧表示し、追加された各ページを、そのページを導入した PR に対応付けます。その項目のタイトルを、ページへの markdown リンクで囲みます(例:* [<title>](https://remotion.dev/docs/<slug>) by @author in <url>)。URL は、ページの frontmatter に slug: があればそこから取得し、なければ packages/docs/docs/ からの相対ファイルパスを使用します。新しいドキュメントページがない項目にはリンクを設定しません
    • 「Templates」は、template-* に関する変更をまとめる独立したセクションです
    • PR の作成者と照合するため、gh api repos/remotion-dev/remotion/contributors --paginate --jq '.[].login' を実行して、実際に新規のコントリビューターを確認します。このリストに含まれない作成者がいる場合にのみ、「New Contributors」セクションを追加します
    • 最後に **Full Changelog**: https://github.com/remotion-dev/remotion/compare/v<previous_version>...v<new_version> を追加します
    • 以前の GitHub リリースを確認し、同じ形式を使用します(gh release view v<previous_version> を実行)
    • 承認を得るまではリリースしないでください。編集できるようにしてください。ただし、これは npm の手順を妨げるものではありません。npm パッケージのスキャン中に変更履歴を作成し、承認を待たずに昇格、プライベート公開、プッシュ、テンプレートの公開を続けます
    • 承認後、/tmp/release-<version>.md を再読み込みします(編集されている可能性があります)。その後、gh release create v<version> --title v<version> --notes-file /tmp/release-<version>.md --verify-tag を実行します
  • 最後に、スクラッチパッドから npm トークンのローカルコピーを削除します。トークンは7日後に自動的に期限切れになります。

コメント