FTP-Deploy-Actionが突然動かなくなった
2023年1月31日(火) 6時42分24秒 | 131 view
健気に毎週弱音も吐かず回り続けていたActionがある日突然動かなくなっていました。 調査したところFTP-Deploy-Actionが動かなくなっていた模様 とりあえずバージョンを確認したところ最新バージョンの4.3.3が公開されていたのでアップデートをしました。 - name: Deploy via FTP uses: SamKirkland/FTP-Deploy-Action@4.3.3 with: server: ${{ secrets.FTP_HOST }} username: ${{ secrets.FTP_USERNAME }} password: ${{ secrets.FTP_PASSWORD }} server-dir: ${{ secrets.FTP_REMOTE_ROOT }} local-dir: dist/ Settingsのkey nameが変わったようです。 ftp-server -> server //デプロイ先のホスト ftp-username -> username //デプロイ先のユーザー名 ftp-password -> password //デプロイ先のパスワード git-ftp-args: --remote-root -> server-dir //展開するサーバーのディレクトリ 展開先の指定がしやすくなったのが良いですね あとは送信中のログもわかりやすくなりました v3.0.0 #=#=# ##O#-# ##O=# # #=#=-# # -#O#- # # -=#=# # # -=O#-# # # -=O=# # # # -=O=-# # # # -=O=- # # # # -=O=- # # # # -=O=- # # # # ######################################################################## 100.0% #=#=# ##O#-# ##O=# # #=#=-# # -#O#- # # -=#=# # # -=O#-# # # -=O=# # # # -=O=-# # # # -=O=- # # # # -=O=- # # # # -=O=- # # # # -=O=- # # # # -=O=- # # # # -=O=- # # # # ############################## 42.5% ####################################################### 76.9% ############################################################# 84.9% ######################################################################## 100.0% v4.3.3 📁 Create: _nuxt/static/pls/tag/php 📁 Create: _nuxt/static/pls/tag/Pixel5 📁 Create: _nuxt/static/pls/tag/PlayCanvas 📁 Create: _nuxt/static/pls/tag/post ... 📄 Upload: _nuxt/static/pls/backnumber/2020-10/payload.js 📄 Upload: _nuxt/static/pls/backnumber/2020-11/payload.js 📄 Upload: _nuxt/static/pls/backnumber/2020-12/payload.js 📄 Upload: _nuxt/static/pls/backnumber/2021-1/payload.js ... 🔁 File replace: backnumber/2020-10/index.html 🔁 File replace: backnumber/2020-11/index.html 🔁 File replace: backnumber/2020-12/index.html 🔁 File replace: backnumber/2021-1/index.html ... 📁 Delete: _nuxt/static/****** ... ⚖️ File content is the same, doing nothing: _nuxt/app.js ⚖️ File content is the same, doing nothing: _nuxt/assets/logos/*********.svg ⚖️ File content is the same, doing nothing: _nuxt/assets/logos/5296501_*********.svg ⚖️ File content is the same, doing nothing: _nuxt/assets/logos/5296514_*********.svg ... ---------------------------------------------------------------- Making changes to 1046 files/folders to sync server state Uploading: 15.7 MB -- Deleting: 15.9 MB -- Replacing: 83.5 MB ---------------------------------------------------------------- 新規作成されるディレクトリ、変更されるファイル、変更のないファイル、削除されたファイルが検出されたあと、アップロード、リプレース、削除がそれぞれ行われます。 nuxt generate時のファイル名固定、_nuxt/static/以下のハッシュ名固定をしておくとデプロイが高速化できそうです。
Windows11にしたらVSCode + Gitがなんかおかしい
2022年4月14日(木) 16時40分33秒 | 983 view
過去記事 症状と背景 パスフレーズ聞かれる、VScodeだと動かない、pushできない、などなど不具合多数 Windows10 -> 11 に変えたけど、それが原因...? 原因 ssh-agentが死んでいた 対応 Powershell管理者権限 Set-Service -Name ssh-agent -StartupType Manual Start-Service ssh-agent ssh-add再登録 C:\Users\ajishixo>ssh-add C:\Users\<username>\id_rsa Enter passphrase for C:\Users\<username>\id_rsa: Identity added: C:\Users\<username>\id_rsa (C:\Users\<username>\id_rsa) 参考記事
PowershellのgitではpushできるのにVSCodeのgit(GUI)ではpushできない問題
2021年11月25日(木) 2時30分15秒 | 3117 view
結論 環境 OS : Windows 10 Git client : Visual Studio Code Git remote:Github via ssh CUI:PowerShell ssh.exe:openssh from chocolatey 背景 2020年のアップデートからhttpsでのGithubへの接続が制限されたので、ssh接続に切り替えてローカルにリポジトリをクローンして運用していた ssh-addで鍵の登録まで終えた 事象 git clone git@github.com:xxxx としてクローンすると、ssh-addで登録したはずなのにパスフレーズを聞かれる(パスが通ると問題なくクローンされる) ssh git@github.com -T を実行すると問題なくGithubと接続できている クローン後のディレクトリをVSCodeのGUIからpushを行ってもPermission deniedになる(パスフレーズも聞かれない) VScode上のターミナルからgit push origin mainを実行するとパスフレーズが聞かれた後に正しくプッシュされる .ssh/configをいくら書き換えても動かない 原因 sshコマンドとgitコマンド内部で呼ばれるsshコマンドが実行ファイルが違うためssh-addされた鍵が共有されない VSCodeのGit Client GUIはパスフレーズを聞く機構がない(鍵が保存されていないと必ずPermission deniedになる) 解決策 gitコマンド内部で呼ぶsshコマンドを、ssh単体で読んだ際の実行ファイルに明示的にパスを当てる C:\Users\<username>\.gitconfigに以下を記述。 [core] sshCommand = C:/Windows/System32/OpenSSH/ssh.exe これでgit cloneでパスフレーズは聞かれず、GUIからのプッシュも問題なく動いた 参考
ページビュー数を表示する
2021年11月6日(土) 15時27分55秒 | 186 view
JAMStackでもページビュー数を取得して表示したい! ということで実装しました。 技術要素はこちら Google Analytics Reporting API v4 google-api-php-client MicroCMS patch API Google Analyticsのデータを閲覧権限で取得してきてNuxtのビルド時にごそっとpatchイベントを介してMicroCMS上で確認できるような設計にしました。 最終的にこんな感じでpv数がmicroCMSで確認できます。 あとは通常のJAMStackと同じで取得したpv数を表示する流れです。 実装: まずPHPでGoogle Analytics Reporting APIの導通をします こちらのページを参考に簡単に作れました。 そのあと、今回は記事ページのpv一覧がほしいので、このようにphpを記述しました <?php // Google API クライアントライブラリの読込み require_once __DIR__ . '/google-api-php-client/vendor/autoload.php'; // 鍵ファイルのパス $key_file_location = __DIR__ . '/service-account-credentials.json'; // ビューID $view_id = 'view_id'; // 認証処理 $client = new Google_Client(); $client->setApplicationName('sample'); $client->setAuthConfig($key_file_location); $client->setScopes([' $analytics = new Google_Service_AnalyticsReporting($client); // データを取得する期間 $dateRange = new Google_Service_AnalyticsReporting_DateRange(); $dateRange->setStartDate('2020-09-01'); $dateRange->setEndDate('today'); // 取得するメトリクスの指定 // // PV $pageviews = new Google_Service_AnalyticsReporting_Metric(); $pageviews->setExpression('ga:pageviews'); //ディメンションをpathに設定 $dimention = new \Google_Service_AnalyticsReporting_Dimension(); $dimention->setName( 'ga:pagePath' ); //部分一致"post"でページ全体をフィルタリング $filter = new \Google_Service_AnalyticsReporting_DimensionFilter(); $filter->setDimensionName( 'ga:pagePath' ); $filter->setOperator( 'PARTIAL' ); $filter->setExpressions( [ 'post' ] ); //フィルタを適用 $filters = new \Google_Service_AnalyticsReporting_DimensionFilterClause(); $filters->setFilters([$filter]); // リクエストの作成 $request = new Google_Service_AnalyticsReporting_ReportRequest(); $request->setViewId($view_id); $request->setDateRanges($dateRange); $request->setMetrics(array($pageviews)); $request->setDimensions( [ $dimention ] ); $request->setDimensionFilterClauses( $filters ); // リクエスト実行 $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); $body->setReportRequests(array($request)); $reports_obj = $analytics->reports->batchGet($body); // オブジェクトを配列変数に変換 $reports_array = json_decode(json_encode($reports_obj), true); //一旦整形する $pageviewarray = $reports_array['reports'][0]['data'][rows]; $outputarray = []; //クエリパラメータ付きのパスは同一PVとして加算する for ($i = 0; $i < count($pageviewarray); $i++) { $realpath = explode("?",$pageviewarray[$i]['dimensions'][0])[0]; if(substr($realpath, -1) != '/'){ $realpath = $realpath . "/"; } if($outputarray[$realpath]['pageview'] == null){ $outputarray[$realpath]['pageview'] = intval($pageviewarray[$i]['metrics'][0]['values'][0]); }else{ $outputarray[$realpath]['pageview'] += intval($pageviewarray[$i]['metrics'][0]['values'][0]); } } //JSで扱いやすいようにフォーマット変更 $output = []; for ($l = 0; $l < count($outputarray) - 1; $l++) { if(substr(array_keys($outputarray)[$l],0,6) == "/post/"){ $obj = array('path'=>array_keys($outputarray)[$l],'id'=>rtrim(substr(array_keys($outputarray)[$l],6),'/'),'pageview'=>$outputarray[array_keys($outputarray)[$l]]['pageview']); } array_push($output,$obj); } echo json_encode($output); するといい感じにAPIができました あとはこいつをnuxt.config.jsでビルド時に記事ページにpatchします let pvobj = await axios.get("getpageview.php"); for(let pv = 0;pv<pvobj.data.length;pv++){ try { console.log("try : " + pvobj.data[pv].id); await axios.patch(' { "X-MICROCMS-API-KEY": "your_microcms_key","Content-Type":"application/json" }}) } catch (e) { console.log('Error!!') } console.log("done"); } これでmicroCMSにPV数が記録されます。 問題点: ビルドプロセスにpatch処理を入れたことで、microCMS側で設定しているGithub ActionのRepository dispatchイベントが発火され続け、Github Actionsのワークフロー一覧が大変なことになりました。 POSTイベントで自動投稿する記事があったので、API入稿もCIを走らせていましたが、今後patchを動かしていくのであればCI動いては困るので、API入稿でのCI発火は止めました。 また、このプロセス追加によってビルド時間が1分→5分くらいに伸びました そんなにリアルタイム性が求めらていないデータなので、今後Github Actionsの無料枠を逼迫するようであればPHPにそのままpatchの処理を移管してcronでも適当に週一くらいで走らせる設計に変更しようと思います。
記事が公開された瞬間にツイートする
2021年9月20日(月) 16時51分57秒 | 59 view
ようやくつけました。めっちゃめんどくさかった 最終的なymlはこんな感じ # This is a basic workflow to help you get started with Actions name: CI # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch on: push: branches: [ master ] repository_dispatch: types: [trigger] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Checkout 🛎️ uses: actions/checkout@v2 - name: setup node uses: actions/setup-node@v1 with: node-version: '10.x' - name: Cache dependencies uses: actions/cache@v1 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: install run: npm install . - name: generate run: npm run generate - name: Commit & Push changes uses: actions-js/push@master with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: 'master' - name: Deploy via FTP uses: SamKirkland/FTP-Deploy-Action@3.0.0 with: ftp-server: ${{ secrets.FTP_HOST }} ftp-username: ${{ secrets.FTP_USERNAME }} ftp-password: ${{ secrets.FTP_PASSWORD }} git-ftp-args: --remote-root ${{ secrets.FTP_REMOTE_ROOT }} local-dir: dist/ - name: get title if: ${{ github.event.client_payload.type == 'new'}} id: myRequest uses: fjogeleit/http-request-action@master with: url: " github.event.client_payload.id }}" method: GET customHeaders: '{"X-API-KEY": "${{ secrets.X_API_KEY }}"}' - name: tweet if: ${{ github.event.client_payload.type == 'new'}} run: curl -X POST -H "Content-Type:application/json" -d '{"value1":"${{ fromJson(steps.myRequest.outputs.response).title }}","value2":" ${{ secrets.IFTTT_URL }} ちょうど空きができたので、tweetの部分はIFTTTでアプレットを作成(Twitterのアプリ登録めんどいしね) 投稿されたidを取得するのは簡単だったけど、それを利用してtitleを取得してくるのがだるかった。。。 忘備録: idを指定したstepはsteps.[step_id].outputsで取得可能 JSON.parseはfromJson()でいける 事前にcurlしてそれを利用したい場合、このactionが良かった sawa-zenさんありがとうございました!
actions-js/push@masterでのデフォルトブランチがmasterからmainに変わっていてCIが動かなくなっていた
2021年8月30日(月) 8時49分10秒 | 79 view
ある日突然CIが動かなくなった このCI自体はこのブログシステムのJAMStackアーキテクチャ内で利用していて、ブログシステムのアップデートと記事の更新によるトリガでCIが動くような仕組みになっている。 triggerと書かれたworkflow runが記事の更新によるものでソースコードについては編集を加えていないため、CIが動作しなくなるのはなにかのライブラリのはず ということで調査を行った 失敗したCIのログがこちら エラーが出ているActionはこちら エラー箇所のログはこちら Run actions-js/push@master with: github_token: *** author_email: github-actions[bot]@users.noreply.github.com author_name: github-actions[bot] branch: main directory: . Started: bash /home/runner/work/_actions/actions-js/push/master/start.sh Push to branch main [master 856abcb] chore: autopublish 2021-08-08T14:39:20Z (中略) To ! [rejected] HEAD -> main (fetch first) error: failed to push some refs to ' 原因はbranch: mainの箇所 ドキュメントを読んでみると、Inputsの中のbranchはデフォルトで'master'を参照していると書いてあったのだが、Destination branch to push changes とあるので、デフォルトブランチを参照するという意味とも取れる。ややこしい。 まだ自分の管理しているリポジトリではmasterからmainへの移行がすすんでいなかったため起きたエラーだった。以下のように修正し、問題なく動作することが確認できた。 - name: Commit & Push changes uses: actions-js/push@master with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: 'master' #追加
Github Codespaces試してみた
2020年10月24日(土) 16時7分6秒 | 81 view
今のところめっちゃいい感じ 基本的にVSCode こまったらCtrl + Shift + Pで何とかなるところとか普通にVSCode npm run devとかでlocalhost:3000とかでデバック環境立ち上がると、URLが作成されてどの端末からでもそのURLでアクセス可能 スマホからデバッグできるの良いね 初動が遅い、修正の反映も遅いのがちょっと微妙かも、、、 と思ったけど反映早いわ ちょっとエラーがうざい VSCodeでは見逃されていたようなエラー(v-forのv-bind:keyないとかそのレベル)が結構怒られる。 オートセーブ 知らなくて焦った