Skip to content

Releases: KoukeNeko/taiga-cli

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 17:07
v0.9.0
6aa7568

On Linux, a locked Secret Service with no desktop to unlock it on, as over SSH, used to take your password and only then fail with write OS keyring: failed to unlock correct collection. Credentials there now go straight to a private file by default.

Changed

  • On Linux, auto, the default --credential-store, now keeps credentials in ~/.config/taiga-cli/credentials.json, readable only by your user, and never contacts the OS keyring. A Linux keyring is often locked with no desktop to unlock it on, as over SSH, and auth login used to take the password and then fail with write OS keyring: failed to unlock correct collection. --credential-store=keyring still uses the keyring, and macOS and Windows are unchanged. A credential already in a Linux keyring is not read under auto, so run taiga auth login once after upgrading, or pass --credential-store=keyring to keep using it.

繁體中文

在 Linux 上,被鎖住的 keyring 若沒有桌面可以解鎖(例如 SSH 連線),過去會先收下密碼,最後才以 write OS keyring: failed to unlock correct collection 失敗。現在 Linux 預設會直接把憑證存到只有你能讀取的檔案。

變更

  • 在 Linux 上,預設的 --credential-store(auto)現在會把憑證存到 ~/.config/taiga-cli/credentials.json(只有你的使用者能讀取),完全不接觸 OS keyring。Linux 的 keyring 常常是鎖住的,而且像 SSH 連線這樣沒有桌面可以解鎖;過去 auth login 會先收下密碼,最後才以 write OS keyring: failed to unlock correct collection 失敗。--credential-store=keyring 仍會使用 keyring,macOS 與 Windows 的行為不變。auto 不會讀取已經存在 Linux keyring 裡的憑證,升級後請執行一次 taiga auth login,或加上 --credential-store=keyring 繼續使用原本的憑證。

Install / Update

  • Homebrew (macOS/Linux): brew install koukeneko/tap/taiga · update with brew upgrade taiga
  • Scoop (Windows): scoop bucket add koukeneko https://github.com/KoukeNeko/scoop-bucket && scoop install koukeneko/taiga-cli
  • APT / DNF repositories (auto-updating) and .deb / .rpm: see INSTALL.md
  • Or download an asset below and verify it against SHA256SUMS.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 22 Sep 13:56
v0.8.0
34ec906

Stories and issues can now carry tags from the command line. --tags sets them when you create or edit a work item, and list, view and --json show them, so reading or changing a work item's tags no longer needs the web UI.

Added

  • --tags on story create, story edit, issue create, and issue edit sets a work item's tags. Repeat the flag or comma-separate values for more than one; whitespace around each value is trimmed. On edit it replaces the full tag list, and passing an empty string clears it. Taiga lowercases tag names on its own, so Mixed Case is stored as mixed case. story list, story view, issue list, and issue view now show a TAGS column and Tags line, and --json always carries a tags array, even when there are no tags.

Contributors

  • @deep9 (Ondrej Huta) added tag support to stories and issues in #3. Thank you!

繁體中文

現在可以直接從命令列替 user story 與 issue 加上標籤。建立或編輯工作項目時用 --tags 設定,list、view 與 --json 也會顯示標籤,查看或修改標籤不必再回到網頁介面。

新增

  • story create、story edit、issue create 與 issue edit 新增 --tags,用來設定工作項目的標籤。可重複指定該旗標,或以逗號分隔多個值;每個值前後的空白會自動去除。在 edit 中會直接取代整組標籤,傳入空字串則會清空。Taiga 會自動將標籤轉為小寫,因此 Mixed Case 會存成 mixed case。story list、story view、issue list 與 issue view 現在也會顯示 TAGS 欄位/Tags 列,--json 一律會提供 tags 陣列,即使沒有任何標籤也一樣。

貢獻者

  • @deep9(Ondrej Huta)在 #3 為 story 與 issue 加入標籤支援。感謝!

Install / Update

  • Homebrew (macOS/Linux): brew install koukeneko/tap/taiga · update with brew upgrade taiga
  • Scoop (Windows): scoop bucket add koukeneko https://github.com/KoukeNeko/scoop-bucket && scoop install koukeneko/taiga-cli
  • APT / DNF repositories (auto-updating) and .deb / .rpm: see INSTALL.md
  • Or download an asset below and verify it against SHA256SUMS.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 14 Sep 13:17
v0.7.0
3b32292

Taiga CLI now works on a Linux server, container or SSH session without a desktop, where every command used to stop at a keyring error. Credentials go to a file only when there is provably no keyring service, and --credential-store lets you choose instead. Commands that refresh an expired token at the same time no longer invalidate each other's login, and auth status says where the credential in use is kept.

Added

  • --credential-store and TAIGA_CREDENTIAL_STORE choose where credentials are kept: auto (the default, described below), keyring to fail rather than ever write a file, file to use only the credentials file and never contact a keyring, which suits a server, or none to keep nothing and rely on TAIGA_TOKEN. auth login under none is refused before it asks for anything.
  • auth status says where the credential in use is kept: the OS keyring, the credentials file with its path, or TAIGA_TOKEN. --json carries it as credential_source, with credential_file for a file. A login's one notice that a token went to a file is easy to miss, and this is where to look afterwards.

Fixed

  • taiga auth login works on a Linux machine with no keyring service, such as a server, a container or an SSH session without a desktop. Every command there used to stop at read OS keyring: The name org.freedesktop.secrets was not provided by any .service files, including auth status and the login that would have fixed it. When the session bus confirms that nothing provides the Secret Service, the credential goes to credentials.json in the configuration directory instead, readable only by the user, and the login names the file; --json output carries it as credential_file. A keyring that exists but is locked or declines is still reported, never bypassed, and so is a session bus that is configured but cannot be reached, such as a stale address or one inherited through sudo. A credential saved to the file keeps working after a keyring is installed, takes precedence over any older copy the keyring still holds, and moves into the keyring the next time it is written. A credentials file that other users can read is refused, with the chmod that fixes it, rather than silently used.
  • Commands that find the access token expired at the same moment no longer strand each other. Taiga retires a refresh token once it is used, so of several commands refreshing the same pair only the first succeeded, and the rest failed with Given token not valid for any token type. A refresh now waits for a lock beside the credentials, reads the stored pair again, and uses a pair another command has just refreshed instead of spending the retired one. auth login and auth logout take the same lock, so a refresh already under way cannot overwrite a new login or bring back a credential that was just logged out. Six concurrent auth status runs against an expired token now all succeed with a single refresh, where before five of six failed.
  • An OS keyring that cannot be used from a session without a desktop, such as a locked GNOME Keyring over SSH, now reports credential_store_unavailable and says how to go on: unlock the keyring another way, or choose --credential-store=file. It used to report an unexpected failure quoting only the library's failed to unlock correct collection.

繁體中文

Taiga CLI 現在可以在沒有桌面環境的 Linux 伺服器、容器或 SSH 連線上使用;過去在這些環境中,每個指令都會卡在 keyring 錯誤。只有在確定沒有 keyring 服務時,憑證才會改存到檔案,也可以用 --credential-store 自行指定存放方式。多個指令同時刷新過期的 token 時,不會再讓彼此的登入失效,auth status 也會顯示目前使用的憑證存放在哪裡。

新增

  • 新增 --credential-store 與 TAIGA_CREDENTIAL_STORE,用來指定憑證存放方式:auto(預設,行為見下方);keyring 無法使用 keyring 時直接失敗,絕不寫檔案;file 只用憑證檔、完全不接觸 keyring,適合伺服器;none 不儲存任何憑證,改用 TAIGA_TOKEN。在 none 模式下執行 auth login 會在詢問任何資料之前就拒絕。
  • auth status 會顯示目前使用的憑證來源:OS keyring、憑證檔(含路徑)或 TAIGA_TOKEN。--json 以 credential_source 欄位提供,來源是檔案時另附 credential_file。登入時「token 存到檔案」的提示只出現一次、很容易錯過,之後可以在這裡確認。

修正

  • taiga auth login 現在可以在沒有 keyring 服務的 Linux 上使用,例如伺服器、容器或沒有桌面環境的 SSH 連線。在這類環境中,過去每個指令都會停在 read OS keyring: The name org.freedesktop.secrets was not provided by any .service files,連 auth status 和原本能解決問題的登入都一樣。現在只要 session bus 確認沒有任何程式提供 Secret Service,憑證就會改存到設定目錄下的 credentials.json(只有使用者本人能讀取),登入時會列出檔案位置;--json 輸出以 credential_file 欄位提供。keyring 存在但被鎖住或拒絕存取時仍會回報錯誤,不會被繞過;已設定 session bus 卻連不上時(例如位址已失效,或透過 sudo 繼承了其他使用者的 bus)也一樣。存在檔案裡的憑證在之後安裝 keyring 後仍可繼續使用,且優先於 keyring 中可能殘留的舊副本,下一次寫入時就會移進 keyring。其他使用者可讀取的憑證檔會被拒絕使用,並提示修正用的 chmod 指令。
  • 多個指令同時發現 access token 過期時,不會再互相讓對方失效。Taiga 的 refresh token 用過一次就作廢,所以過去同時刷新同一組 token 時只有第一個會成功,其餘都以 Given token not valid for any token type 失敗。現在刷新前會先取得憑證旁的鎖、重新讀取已儲存的 token,若其他指令剛刷新過就直接沿用新的那組,不再送出已作廢的 refresh token。auth login 與 auth logout 也會取得同一個鎖,因此正在進行的刷新不會覆蓋剛登入的憑證,也不會讓剛登出的憑證又被寫回來。實測 6 個同時執行的 auth status 遇到過期 token 時全部成功、只刷新一次;修正前 6 個中有 5 個失敗。
  • 在沒有桌面環境的連線中無法使用 OS keyring 時(例如透過 SSH 使用被鎖住的 GNOME Keyring),現在會回報 credential_store_unavailable,並說明解法:用其他方式解鎖 keyring,或改用 --credential-store=file。過去只會顯示「unexpected failure」和函式庫的 failed to unlock correct collection。

Install / Update

  • Homebrew (macOS/Linux): brew install koukeneko/tap/taiga · update with brew upgrade taiga
  • Scoop (Windows): scoop bucket add koukeneko https://github.com/KoukeNeko/scoop-bucket && scoop install koukeneko/taiga-cli
  • APT / DNF repositories (auto-updating) and .deb / .rpm: see INSTALL.md
  • Or download an asset below and verify it against SHA256SUMS.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 09 Sep 12:24
v0.6.0
e5f23f3

Renamed back to Taiga CLI

The project is Taiga CLI again, and the binary is taiga. The Taiga team confirmed on the community forum that a small, clearly independent side project describing itself with the Taiga name is not a problem; the concern they raised was the retired "TaigaNext" name, not a third-party client. The name used to describe what this client talks to now also names the client, and the aihki command that was awkward to type is gone.

Every identifier the 0.2.0 rename introduced returns to its original. The keyring service and the configuration directory are taiga-cli, a repository pinned in .git/config reads taiga.profile and taiga.project, environment overrides use the TAIGA_ prefix, and the OS keyring, config file and Git-local sections carry those names directly rather than through a fallback.

The one-way compatibility shims that 0.2.0 added to carry Aihki-era settings forward are removed rather than kept in the other direction, so a login stored under aihki is not migrated; run taiga auth login once. What you need to change: brew install koukeneko/tap/taiga replaces the Aihki formula, release archives are named taiga_<version>_<os>_<arch>, and completion files are taiga.bash, _taiga, taiga.fish and taiga.ps1.


繁體中文

改回 Taiga CLI

專案重新命名回 Taiga CLI,執行檔為 taiga。Taiga 團隊在社群論壇上確認:一個明確獨立、規模不大的 side project 以 Taiga 之名描述自己並不成問題;他們在意的是已退役的「TaigaNext」名稱,而不是第三方 client。用來描述此 client 連線對象的名稱,如今也成為 client 自己的名稱,難打的 aihki 指令就此走入歷史。

0.2.0 改名時引入的每個識別字都還原成原本的樣子。keyring service 與設定目錄為 taiga-cli,在 .git/config 裡綁定的 repository 讀取 taiga.profile 與 taiga.project,環境變數覆寫使用 TAIGA_ 前綴,而 OS keyring、設定檔與 Git-local 段都直接使用這些名稱,不再經過 fallback。

0.2.0 為了把 Aihki 時期的設定往前搬而加入的單向相容轉換已移除,不再往另一個方向保留,因此在 aihki 底下儲存的登入不會被搬移;請執行一次 taiga auth login。你需要調整的地方: 以 brew install koukeneko/tap/taiga 取代 Aihki 的 formula,release archive 命名為 taiga_<version>_<os>_<arch>,completion 檔為 taiga.bash、_taiga、taiga.fish 與 taiga.ps1。


Install / Update

  • Homebrew (macOS/Linux): brew install koukeneko/tap/taiga · update with brew upgrade taiga
  • Scoop (Windows): scoop bucket add koukeneko https://github.com/KoukeNeko/scoop-bucket && scoop install taiga
  • APT / DNF repositories (auto-updating) and .deb / .rpm: see INSTALL.md
  • Or download an asset below and verify it against SHA256SUMS.

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 07 Sep 17:43
v0.5.2
e5724cd

Changed

  • A token login that lands without a refresh token now says how to get one. It already said the login would expire; saying only that leaves a person exactly where the message found them, so the notice carries the console one-liner that copies both tokens — the same one the wizard offers an account that signs in through a provider.

繁體中文

變更

  • 以 token 登入而沒有帶到 refresh token 時,現在會說明怎麼補。原本只告知這組憑證會過期,而只講這件事等於把人留在原地;因此該提示現在附上一次複製兩個 token 的 console 指令——就是精靈給第三方登入帳號的那一行。

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 07 Sep 17:22
v0.5.1
23c1365

Fixed

  • The rename note in 0.2.0 said the Taiga maintainers had required a spin-off to drop the name. Nothing published says that. What is on the record is that Taiga's makers moved to MPL-2.0 for the control it gave them over the trademark, and that Kaleidos kept the brand when the successor project passed to another company, which then shipped under a name of its own. The entry now says only that, which is both checkable and the stronger reason for this project to carry its own name.

繁體中文

修正

  • 0.2.0 的更名說明寫著 Taiga 維護者曾要求分家專案放棄該名稱,但公開紀錄裡並沒有這件事。有紀錄的是:Taiga 製作方改用 MPL-2.0 是為了取得對商標的更多控制權,以及後繼專案交由另一家公司接手時 Kaleidos 保留了品牌、該專案改以自己的名字發布。該段落現在只陳述這些,既查得到,也是本專案該有自己名字的更有力理由。

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 15:57
v0.5.0
6a00999

Two things a caller could not find out without asking, answered. aihki auth login now asks which Taiga to log in to even when the profile already saved one, so moving to another Taiga no longer means knowing --url. And aihki schema describes the fields inside a list and inside a single answer, derived from the types the commands emit, with the optional ones marked so that a field missing from one row is not read as a field that does not exist. Around those: a table that holds one page of a longer list says so, argument errors carry the command's usage, and the root help points an unattended caller at schema.

Added

  • aihki schema now describes what is in a list, and what a single answer holds, not only that there is one. Every list command's output_schema carries the shape of one item — the encoded field names, their types, and which of them are always written — derived from the type the command emits, so it cannot drift from what is actually sent. The optional ones matter most: story history declares comment as a field that may be absent, which is the difference between a row that carries no comment and a command that has no such field, and reading one row cannot tell those apart. tag list and integration providers build their rows on the spot and so still describe only the envelope. The same shape now reaches the commands that answer with one thing rather than a page of them: story view, project view, stats project, every watch and vote, and thirty-odd others carry the fields of what they send. The commands that build their answer as a map on the spot still describe only the envelope, since there is no type to read them from.
  • When the address given to an interactive auth login is under taiga.io but is not the web app, such as the community forum, the login offers https://tree.taiga.io/ and continues there on a yes. Nothing is contacted beyond the typed site until the person has answered, and a script still gets the error, because nothing may choose a destination for it.
  • auth login --with-token accepts the JSON object the web app holds, {"auth_token": …, "refresh": …}, as well as a bare token. With the refresh token an imported login renews itself the way a password login does, instead of ending when the access token expires; the wizard and the README give the console one-liner that copies both. The result says whether a refresh token was stored.

Changed

  • The CLI now says what it expects rather than leaving it to be looked up. An argument error carries the command's usage line, so custom-field list names <epic|story|task|issue> instead of only counting what was missing; --fields says that an unknown name lists the available ones, which is the one complete source, since a field the sampled row left out still appears there; and the root help points an unattended caller at aihki schema <command> for a command's schemas, safety and idempotency. Each of these was a wrong turn taken while driving the CLI, and each is now answered where the wrong turn happens rather than in the README.
  • auth login at a terminal now asks which Taiga to log in to even when the profile already saved one, offering the saved URL as the default so that Enter keeps it and contacts nothing. Logging in is when someone moves to another Taiga, and until now the saved URL was used without a word and could only be changed by knowing --url. An API URL this invocation names through --api-url or the environment is still obeyed without a question, and a script keeps the saved URL, having nobody to ask.

Fixed

  • A table that holds only one page of a longer list now says so, as showing 30 of 54; use --limit to see more on stderr. Until now a table that stopped at the page size looked exactly like a list that ended there, so story history, story list and every other paginated table quietly invited conclusions drawn from a fraction of the data. The notice stays off stdout so the table is still pipeable, says nothing when the page holds the whole list, and is silent under --quiet; JSON output is unchanged, having carried page all along.

繁體中文

兩件呼叫端原本不開口就不會知道的事,現在都有答案了。aihki auth login 即使 profile 已經存過網址,仍會先問要登入哪一個 Taiga,換到另一個 Taiga 不再需要知道 --url。而 aihki schema 會描述列表項目與單筆回應裡的欄位,由指令實際輸出的型別推導,並標示哪些是可選的,於是「某一列沒有這個欄位」不會被讀成「這個指令沒有這個欄位」。圍繞著這兩件事:表格若只裝得下一頁會直說,參數錯誤會附上該指令的 usage,根層說明則指引無人值守的呼叫端去看 schema。

新增

  • aihki schema 現在會描述列表裡裝的是什麼,以及單筆回應裡有什麼,而不只是說「這是一個列表」。每個列表指令的 output_schema 都帶著單一項目的形狀——編碼後的欄位名、型別,以及哪些欄位一定會被寫出——由該指令實際輸出的型別推導而來,因此不會與真正送出的內容脫節。其中「可選」的資訊最關鍵:story history 會聲明 comment 是一個可能缺席的欄位,而這正是「這一列沒有留言」與「這個指令沒有這個欄位」的差別,只讀一列是分不出來的。tag list 與 integration providers 的每一列是就地組出來的,沒有型別可依據,因此仍然只描述外層信封。 同樣的形狀現在也涵蓋回應單一項目的指令:story view、project view、stats project、所有 watch 與 vote,以及其他三十幾個,都帶著它們送出的欄位。至於把回應就地組成 map 的指令仍然只描述外層信封,因為沒有型別可以據以推導。
  • 互動式 auth login 收到的網址在 taiga.io 底下卻不是網頁應用(最常見的是社群論壇)時,會提議改用 https://tree.taiga.io/,回答 yes 就接續登入。在回答之前不會接觸你輸入以外的任何站台;script 仍然會拿到錯誤,因為不該有任何東西替它決定目的地。
  • auth login --with-token 除了單一 token,也接受網頁應用持有的 JSON 物件 {"auth_token": …, "refresh": …}。帶著 refresh token 的匯入登入能像密碼登入一樣自動更新,不再於 access token 過期時失效;精靈與 README 提供一次複製兩者的 console 指令。結果會標示是否存入了 refresh token。

變更

  • CLI 現在會直接說明它期待什麼,而不是留給你去查。參數錯誤會附上該指令的 usage,所以 custom-field list 會指名 <epic|story|task|issue>,不再只是數少了幾個;--fields 的說明寫明傳一個不存在的名稱就會列出可用欄位,而那份清單是唯一完整的來源——取樣時剛好沒出現的欄位仍然會列在裡面;根層說明則會指引無人值守的呼叫端去看 aihki schema <command>,取得該指令的 schema、safety 與 idempotency。這三點都是實際操作這個 CLI 時走錯的路,現在都在走錯的當下回答,而不是寫進 README。
  • 在終端機執行 auth login 時,即使 profile 已經存過網址,現在仍會先問要登入哪一個 Taiga,並以存好的網址作為預設值,按 Enter 就沿用,而且不會接觸任何站台。登入正是有人要換到另一個 Taiga 的時機,在此之前存好的網址會被無聲沿用,只有知道 --url 的人改得動。這次執行以 --api-url 或環境變數指名的 API 網址仍然照用不問;script 沒有對象可問,會沿用存好的網址。

修正

  • 表格若只裝得下整份清單的其中一頁,現在會在 stderr 說明,格式為 showing 30 of 54; use --limit to see more。在此之前,表格在頁面大小處停住的樣子跟清單真的到此為止一模一樣,於是 story history、story list 以及其他所有分頁表格都在無聲地誘導你用一部分資料下結論。提示不會寫到 stdout,表格照樣可以接管線;整份都顯示得下時不會出現;--quiet 之下靜音。JSON 輸出不變,它本來就帶著 page。

v0.5.0-rc.2

v0.5.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Sep 15:33
v0.5.0-rc.2
5359a4e

What a caller can find out without asking is what this candidate changes. aihki schema now describes the fields inside a list and inside a single answer, derived from the types the commands emit, with the optional ones marked so that a field missing from one row is not read as a field that does not exist. A table that holds one page of a longer list says so. An argument error carries the command's usage line, --fields says that an unknown name lists the available ones, and the root help points an unattended caller at schema.

Added

  • aihki schema now describes what is in a list, and what a single answer holds, not only that there is one. Every list command's output_schema carries the shape of one item — the encoded field names, their types, and which of them are always written — derived from the type the command emits, so it cannot drift from what is actually sent. The optional ones matter most: story history declares comment as a field that may be absent, which is the difference between a row that carries no comment and a command that has no such field, and reading one row cannot tell those apart. tag list and integration providers build their rows on the spot and so still describe only the envelope. The same shape now reaches the commands that answer with one thing rather than a page of them: story view, project view, stats project, every watch and vote, and thirty-odd others carry the fields of what they send. The commands that build their answer as a map on the spot still describe only the envelope, since there is no type to read them from.

Changed

  • The CLI now says what it expects rather than leaving it to be looked up. An argument error carries the command's usage line, so custom-field list names <epic|story|task|issue> instead of only counting what was missing; --fields says that an unknown name lists the available ones, which is the one complete source, since a field the sampled row left out still appears there; and the root help points an unattended caller at aihki schema <command> for a command's schemas, safety and idempotency. Each of these was a wrong turn taken while driving the CLI, and each is now answered where the wrong turn happens rather than in the README.

Fixed

  • A table that holds only one page of a longer list now says so, as showing 30 of 54; use --limit to see more on stderr. Until now a table that stopped at the page size looked exactly like a list that ended there, so story history, story list and every other paginated table quietly invited conclusions drawn from a fraction of the data. The notice stays off stdout so the table is still pipeable, says nothing when the page holds the whole list, and is silent under --quiet; JSON output is unchanged, having carried page all along.

繁體中文

這個候選版的主題是「呼叫端不必開口就能知道的事」。aihki schema 現在會描述列表項目與單筆回應裡的欄位,由指令實際輸出的型別推導,並標示哪些是可選的,於是「某一列沒有這個欄位」不會被讀成「這個指令沒有這個欄位」。表格若只裝得下整份清單的一頁,會直說。參數錯誤會附上該指令的 usage,--fields 說明傳一個不存在的名稱就會列出可用欄位,根層說明則指引無人值守的呼叫端去看 schema。

新增

  • aihki schema 現在會描述列表裡裝的是什麼,以及單筆回應裡有什麼,而不只是說「這是一個列表」。每個列表指令的 output_schema 都帶著單一項目的形狀——編碼後的欄位名、型別,以及哪些欄位一定會被寫出——由該指令實際輸出的型別推導而來,因此不會與真正送出的內容脫節。其中「可選」的資訊最關鍵:story history 會聲明 comment 是一個可能缺席的欄位,而這正是「這一列沒有留言」與「這個指令沒有這個欄位」的差別,只讀一列是分不出來的。tag list 與 integration providers 的每一列是就地組出來的,沒有型別可依據,因此仍然只描述外層信封。 同樣的形狀現在也涵蓋回應單一項目的指令:story view、project view、stats project、所有 watch 與 vote,以及其他三十幾個,都帶著它們送出的欄位。至於把回應就地組成 map 的指令仍然只描述外層信封,因為沒有型別可以據以推導。

變更

  • CLI 現在會直接說明它期待什麼,而不是留給你去查。參數錯誤會附上該指令的 usage,所以 custom-field list 會指名 <epic|story|task|issue>,不再只是數少了幾個;--fields 的說明寫明傳一個不存在的名稱就會列出可用欄位,而那份清單是唯一完整的來源——取樣時剛好沒出現的欄位仍然會列在裡面;根層說明則會指引無人值守的呼叫端去看 aihki schema <command>,取得該指令的 schema、safety 與 idempotency。這三點都是實際操作這個 CLI 時走錯的路,現在都在走錯的當下回答,而不是寫進 README。

修正

  • 表格若只裝得下整份清單的其中一頁,現在會在 stderr 說明,格式為 showing 30 of 54; use --limit to see more。在此之前,表格在頁面大小處停住的樣子跟清單真的到此為止一模一樣,於是 story history、story list 以及其他所有分頁表格都在無聲地誘導你用一部分資料下結論。提示不會寫到 stdout,表格照樣可以接管線;整份都顯示得下時不會出現;--quiet 之下靜音。JSON 輸出不變,它本來就帶著 page。

v0.5.0-rc.1

v0.5.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Sep 14:46
v0.5.0-rc.1
849a13d

Logging in is where this release goes. aihki auth login now asks which Taiga to log in to even when the profile already saved one, so moving to another Taiga no longer means knowing --url, and Enter keeps the saved URL without contacting anything. A URL under taiga.io that is not the web app, such as the community forum, is now offered the hosted app instead of only being refused.

Added

  • When the address given to an interactive auth login is under taiga.io but is not the web app, such as the community forum, the login offers https://tree.taiga.io/ and continues there on a yes. Nothing is contacted beyond the typed site until the person has answered, and a script still gets the error, because nothing may choose a destination for it.
  • auth login --with-token accepts the JSON object the web app holds, {"auth_token": …, "refresh": …}, as well as a bare token. With the refresh token an imported login renews itself the way a password login does, instead of ending when the access token expires; the wizard and the README give the console one-liner that copies both. The result says whether a refresh token was stored.

Changed

  • auth login at a terminal now asks which Taiga to log in to even when the profile already saved one, offering the saved URL as the default so that Enter keeps it and contacts nothing. Logging in is when someone moves to another Taiga, and until now the saved URL was used without a word and could only be changed by knowing --url. An API URL this invocation names through --api-url or the environment is still obeyed without a question, and a script keeps the saved URL, having nobody to ask.

繁體中文

這一版都在登入這件事上。aihki auth login 現在即使 profile 已經存過網址,仍會先問要登入哪一個 Taiga,換到另一個 Taiga 不再需要知道 --url,按 Enter 沿用存好的網址而且不會接觸任何站台。taiga.io 底下卻不是網頁應用的網址(例如社群論壇)不再只是被拒絕,而是會提議改用託管版。

新增

  • 互動式 auth login 收到的網址在 taiga.io 底下卻不是網頁應用(最常見的是社群論壇)時,會提議改用 https://tree.taiga.io/,回答 yes 就接續登入。在回答之前不會接觸你輸入以外的任何站台;script 仍然會拿到錯誤,因為不該有任何東西替它決定目的地。
  • auth login --with-token 除了單一 token,也接受網頁應用持有的 JSON 物件 {"auth_token": …, "refresh": …}。帶著 refresh token 的匯入登入能像密碼登入一樣自動更新,不再於 access token 過期時失效;精靈與 README 提供一次複製兩者的 console 指令。結果會標示是否存入了 refresh token。

變更

  • 在終端機執行 auth login 時,即使 profile 已經存過網址,現在仍會先問要登入哪一個 Taiga,並以存好的網址作為預設值,按 Enter 就沿用,而且不會接觸任何站台。登入正是有人要換到另一個 Taiga 的時機,在此之前存好的網址會被無聲沿用,只有知道 --url 的人改得動。這次執行以 --api-url 或環境變數指名的 API 網址仍然照用不問;script 沒有對象可問,會沿用存好的網址。

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 08:12
v0.4.0
ac09eb7

The first login is the whole of this release. aihki auth login now asks for the URL of any page inside your Taiga, with the hosted Taiga as the default, and then how your account signs in, so that an account backed by GitHub or Google is walked to its token instead of a password it does not have. --url replaces --host, which still works, and a token pasted at a terminal takes Enter rather than Ctrl-D.

Added

  • aihki auth login with nothing else asks two questions a person can answer: the URL of any page inside their Taiga, with the hosted Taiga offered as the default so that its users only press Enter, and how their account signs in, offering a password, a provider such as GitHub or Google, or an existing token. The site and API the credential will go to are shown before any credential is asked for, and a script that omits the URL is told to pass --url rather than being asked.
  • --url takes the URL of any page inside the Taiga web app, such as a project or backlog page. The web app's conf.json is looked for at that path and at each path above it, the API it names has to answer as Taiga before it counts, and the API's own address is accepted as well. Only the site that was typed is contacted: a redirect within it is followed, a redirect to another site is reported, and nothing is sent with a credential. When no Taiga is found, the error lists every URL tried and what each answered, says that no credentials were sent, and for a host under taiga.io names https://tree.taiga.io/ as the hosted web app.
  • A refused password now says that an account which signs in through GitHub, Google or another provider has no password, and gives the --with-token command to run instead.

Changed

  • The flag that names the Taiga site is --url on auth login and doctor; --host still works and says to use --url. What the flag takes is a URL with a scheme and a path, which "host" misnamed.

Fixed

  • auth login --with-token at a terminal prompts for the token and takes one line, entered without echo like a password, so pasting it and pressing Enter is enough. It used to wait for the end of input, which at a terminal means Ctrl-D and looked like a hang. Piped input is unchanged.

繁體中文

這一版全部關於第一次登入。aihki auth login 現在會問你的 Taiga 裡任何一頁的網址(預設為官方託管的 Taiga),再問帳號怎麼登入;用 GitHub 或 Google 的帳號會被帶去貼 token,而不是被要求一個它沒有的密碼。--url 取代 --host(舊旗標仍可用),在終端機貼上 token 後按 Enter 即可,不再需要 Ctrl-D。

新增

  • 直接執行 aihki auth login 會問兩個一般人答得出來的問題:你的 Taiga 裡任何一頁的網址(預設為官方託管的 Taiga,直接按 Enter 即可),以及你的帳號怎麼登入(密碼、GitHub 或 Google 等第三方、既有的 token)。在要求任何憑證之前,會先顯示憑證將送往的站台與 API;script 沒給網址時會被告知要傳 --url,而不是被提問。
  • --url 接受 Taiga 網頁應用裡任何一頁的網址,例如專案或 backlog 頁面。程式會在該路徑及其上層逐層尋找網頁應用的 conf.json,它指名的 API 必須以 Taiga 的方式回應才算數;API 本身的位址也接受。只會接觸你輸入的那個站台:站台內的 redirect 會跟隨,導向其他站台的 redirect 會被回報,而且不會帶著任何憑證送出。找不到 Taiga 時,錯誤會列出試過的每一個網址與各自的回應、說明沒有送出任何憑證,taiga.io 底下的主機則會被指名託管的網頁應用在 https://tree.taiga.io/。
  • 密碼被拒絕時,現在會說明用 GitHub、Google 等第三方登入的帳號沒有密碼,並給出改用 --with-token 的指令。

變更

  • auth login 與 doctor 指定 Taiga 站台的旗標改為 --url;--host 仍可用,並會提示改用 --url。這個旗標接受的是帶 scheme 與路徑的 URL,叫 host 名不符實。

修正

  • 在終端機執行 auth login --with-token 時會提示輸入 token,並像密碼一樣不回顯地讀取一行,貼上後按 Enter 即可。原本會等到輸入結束,在終端機上那代表 Ctrl-D,看起來就像卡住。從 pipe 輸入的行為不變。