From d9740597eda89e184baf544851ad495e594cab38 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 04:08:22 +0900 Subject: [PATCH 01/32] Add sample workflow to README --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index bb3bdda..479973b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,23 @@ # GitHub-to-Qiita TBD +```yaml +name: "GitHub to Qiita" + +on: + push: + branches: [ main ] + +jobs: + qiita: + runs-on: ubuntu-latest + steps: + - name: "Publish to Qiita" + uses: noraworld/github-to-qiita@v0.1.0 + with: + dir: "articles" + qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} +``` + ## Important notes The old implementation has moved to [noraworld/github-to-qiita-server](https://github.com/noraworld/github-to-qiita-server), and it is no longer supported. From d310223abaf214d7bcde91fe7faa293ff6cccf89 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 04:10:49 +0900 Subject: [PATCH 02/32] Change TBD to TBA --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 479973b..50c50b8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # GitHub-to-Qiita -TBD +TBA ```yaml name: "GitHub to Qiita" From b7f913c4560825f2d0de855ed1c01d1146b10ad2 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 14:30:33 +0900 Subject: [PATCH 03/32] Update README --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 50c50b8..cf14e1a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ # GitHub-to-Qiita -TBA ```yaml name: "GitHub to Qiita" @@ -19,5 +18,11 @@ jobs: qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} ``` +## Setup +TBA + +## How to contribute +TBA + ## Important notes The old implementation has moved to [noraworld/github-to-qiita-server](https://github.com/noraworld/github-to-qiita-server), and it is no longer supported. From e961ebaf058b1db51dd1db35b1b17f7f522d56d1 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 14:39:52 +0900 Subject: [PATCH 04/32] Create mapping file if not exists --- lib/qiita.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/qiita.rb b/lib/qiita.rb index 10852eb..db64340 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -16,6 +16,8 @@ def initialize(content:, header:, mode:, path:) @header = header @mode = mode @path = path + + create_mapping_file_if_not_exists end # Publish an article to Qiita @@ -113,4 +115,8 @@ def mappings file.read.split("\n") end end + + def create_mapping_file_if_not_exists + File.new(ENV['MAPPING_FILEPATH'], 'a') if File.exist?(ENV['MAPPING_FILEPATH']) + end end From 3c712f7eaae56482f881f139374e0810fa890445 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 14:41:06 +0900 Subject: [PATCH 05/32] Handle errors and validate --- lib/error.rb | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/qiita.rb | 17 ++++++++++- lib/validator.rb | 57 ++++++++++++++++++++++++++++++++++++ main.rb | 7 +++++ 4 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 lib/error.rb create mode 100644 lib/validator.rb diff --git a/lib/error.rb b/lib/error.rb new file mode 100644 index 0000000..52cb385 --- /dev/null +++ b/lib/error.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +class QiitaAccessTokenNotFoundError < StandardError + def initialize(msg: 'A Qiita access token is not found. The env QIITA_ACCESS_TOKEN is missing.') + super(msg) + end +end + +class MappingFilepathNotFoundError < StandardError + def initialize(msg: 'A mapping filepath is not found. The env MAPPING_FILEPATH is missing.') + super(msg) + end +end + +class InvalidHeaderTitleError < StandardError + def initialize(msg: 'A title of an article is missing or invalid.') + super(msg) + end +end + +class InvalidHeaderTopicsError < StandardError + def initialize(msg: 'Topics of an article are missing or invalid.') + super(msg) + end +end + +class InvalidHeaderPublishedError < StandardError + def initialize(msg: 'A published flag of an article is missing or invalid.') + super(msg) + end +end + +class InvalidPublishmentModeError < StandardError + def initialize(msg: 'A publishment mode is invalid. The accepted modes are the following.', mode: nil) + msg += " Mode: #{mode}" unless mode.nil? + super(msg) + end +end + +class CannotGetQiitaItemIDError < StandardError + def initialize(msg: 'Cannot get a new Qiita item ID for some reason.') + super(msg) + end +end + +class QiitaItemIDNotFoundError < StandardError + def initialize(msg: 'Failed to retrieve a Qiita item ID. A mapping file may be broken.') + super(msg) + end +end + +class QiitaItemIDDuplicationError < StandardError + def initialize(msg: 'A Qiita item ID is duplicated. Could not determine which item ID should be trusted.') + super(msg) + end +end + +class QiitaItemIDNotMatchedError < StandardError + def initialize(msg: 'A combination of an article path and a Qiita item ID did not match. This is most likely a Qiita item ID is missing for some reason.') + super(msg) + end +end + +class InvalidQiitaItemIDError < StandardError + def initialize(msg: 'A Qiita item ID is invalid.') + super(msg) + end +end + +class QiitaAPIError < StandardError + def initialize(msg: 'A Qiita API returns a non-succeeded status.', response: nil) + msg += " Status code: #{response.status}, Response body: #{JSON.parse(response.body)}" unless response.nil? + super(msg) + end +end diff --git a/lib/qiita.rb b/lib/qiita.rb index db64340..b593a98 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'json' require 'faraday' class Qiita @@ -12,6 +11,9 @@ class Qiita # @mode: String: A value to indicate that an article is created, updated, or deleted # @path: String: A path where an article exists def initialize(content:, header:, mode:, path:) + Validator.header(header) + Validator.mode(mode) + @content = content @header = header @mode = mode @@ -35,11 +37,16 @@ def publish connection.patch(&request_params) end + raise QiitaAPIError.new(response: response) unless response.status >= 200 && response.status < 300 + JSON.parse(response.body) end # Update a mapping file def update_mapping_file(item_id) + raise CannotGetQiitaItemIDError if item_id.nil? || item_id.empty? + Validator.item_id(item_id) + File.open(ENV['MAPPING_FILEPATH'], 'a') do |file| file.puts "#{@path}, #{item_id}" end @@ -99,6 +106,14 @@ def tags # Get a Qiita item ID corresponding to an article path def item_id + # An error handling + raise QiitaItemIDNotFoundError if mappings.grep(/\A^#{Regexp.escape(@path)}/).empty? + raise QiitaItemIDDuplicationError if mappings.grep(/\A^#{Regexp.escape(@path)}/).length != 1 + raise QiitaItemIDNotMatchedError if mappings.grep(/\A^#{Regexp.escape(@path)}/).first.split.length != 2 + if mappings.grep(/\A^#{Regexp.escape(@path)}/).first.split.last.match(/\A[0-9a-f]{20}\z/).nil? + raise InvalidQiitaItemIDError + end + mappings.grep(/\A^#{Regexp.escape(@path)}/).first.split.last end diff --git a/lib/validator.rb b/lib/validator.rb new file mode 100644 index 0000000..f194f58 --- /dev/null +++ b/lib/validator.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module Validator + # MEMO: 'delete' is not implemented + PUBLISHMENT_MODE = %w[ + create + update + ].freeze + + # It does not check an access token format is valid because it is subject to change + def env + raise QiitaAccessTokenNotFoundError if ENV['QIITA_ACCESS_TOKEN'].nil? || ENV['QIITA_ACCESS_TOKEN'].empty? + raise MappingFilepathNotFoundError if ENV['MAPPING_FILEPATH'].nil? || ENV['MAPPING_FILEPATH'].empty? + end + + # Check required header params + def header(params) + raise InvalidHeaderTitleError unless title_valid?(params['title']) + raise InvalidHeaderTopicsError unless topics_valid?(params['topics']) + raise InvalidHeaderPublishedError unless published_valid?(params['published']) + end + + def mode(param) + raise InvalidPublishmentModeError.new(mode: PUBLISHMENT_MODE) unless PUBLISHMENT_MODE.include?(param) + end + + def item_id(id) + raise InvalidQiitaItemIDError if id&.match(/\A[0-9a-f]{20}\z/).nil? + end + + private + + def title_valid?(param) + return false if param.nil? + return false unless param.is_a?(String) + return false if param.empty? + + true + end + + def topics_valid?(params) + return false if params.nil? + return false unless params.is_a?(Array) + return false if params.empty? + return false unless params.all? { |element| element.is_a?(String) } + return false if params.any? { |element| element.empty? } + + true + end + + def published_valid?(param) + return false if param.nil? + return false if param != true && param != false + + true + end +end diff --git a/main.rb b/main.rb index cd27830..17ea854 100644 --- a/main.rb +++ b/main.rb @@ -9,10 +9,17 @@ Dotenv.load end +require 'json' require 'yaml' +require_relative 'lib/error' +require_relative 'lib/validator' require_relative 'lib/article' require_relative 'lib/qiita' +include Validator + +Validator.env + ENV['ADDED_FILES']&.split&.each do |path| article = Article.new(path: path) qiita = Qiita.new(content: article.content, header: YAML.safe_load(article.header), mode: 'create', path: path) From 68a0ff509ee700fbdc1c4184af627c4e874d4b89 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 15:11:20 +0900 Subject: [PATCH 06/32] Add "User-Agent" to header https://qiita.com/mahaker/items/72bbc0e44bdc57fbd0db Though I think this has nothing to do with status code 403... --- lib/qiita.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/qiita.rb b/lib/qiita.rb index b593a98..110988e 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -59,6 +59,7 @@ def request_params request.url(request_url) request.headers['Authorization'] = "Bearer #{ENV['QIITA_ACCESS_TOKEN']}" request.headers['Content-Type'] = 'application/json' + request.headers['User-Agent'] = 'GitHub to Qiita' request.body = request_body end end From 84db759ea74496e6c3bfbbb24a447967639e0e47 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 15:59:13 +0900 Subject: [PATCH 07/32] Add "Origin" to header https://qiita.com/poppo95/items/df40495a02f4a60cfbd7 Though I think this has nothing to do with status code 403... --- lib/qiita.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/qiita.rb b/lib/qiita.rb index 110988e..9d715b7 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -60,6 +60,7 @@ def request_params request.headers['Authorization'] = "Bearer #{ENV['QIITA_ACCESS_TOKEN']}" request.headers['Content-Type'] = 'application/json' request.headers['User-Agent'] = 'GitHub to Qiita' + request.headers['Origin'] = API_BASE_URL request.body = request_body end end From 09d335881419faf0c35f4fef01d743352048f099 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 17:56:10 +0900 Subject: [PATCH 08/32] Update README Add setup instruction --- README.md | 70 +++++++++++++++++++- screenshots/actions_secrets.png | Bin 0 -> 80619 bytes screenshots/generate_qiita_access_token.png | Bin 0 -> 82999 bytes screenshots/qiita_access_token.png | Bin 0 -> 47425 bytes 4 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 screenshots/actions_secrets.png create mode 100644 screenshots/generate_qiita_access_token.png create mode 100644 screenshots/qiita_access_token.png diff --git a/README.md b/README.md index cf14e1a..f4ed922 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,46 @@ # GitHub-to-Qiita + + +## Setup +### Generate a Qiita access token +Navigate to [the Qiita access token generation page](https://qiita.com/settings/tokens/new). + +![](screenshots/generate_qiita_access_token.png) + +Enter the following information, and click `Generate token` button. + +| Key | Description | Fixed | Sample or Fixed Value | +| ----------- | ------------------------------------------------------------------------------------------- | ----- | ------------------------------ | +| Description | Specify a description so you are easy to understand for what the access token is used later | false | `GitHub to Qiita` | +| Scopes | Specify scopes that describe what privilege the access token has | true | `read_qiita` and `write_qiita` | + +After generating your new access token, it should be going to appear on your screen. Then copy it. Note that it can be shown only once. If you lose it, regenerate it again. + +![](screenshots/qiita_access_token.png) + +**WARNING:** The above screen shot shows a dummy access token, not a real access token. You should not take a screen shot, and must not share it with other people. Please be careful. + +### Set your Qiita access token to your repository +Navigate to the Actions secrets creation page, which is accessible at `https://github.com///settings/secrets/actions/new`. + +![](screenshots/actions_secrets.png) + +Enter the following information, and click the `Add secret` button. + +| Key | Description | Sample Value | +| ----- | ------------------------------------------------------------------------- | --------------------------------------------------------------- | +| Name | Specify your secret environment variable name for your Qiita access token | `QIITA_ACCESS_TOKEN` | +| Value | Specify your Qiita access token | `7ace9cfa98815ed3d5cd1e1bba8e745c152e9071` (THIS IS A SAMPLE!!) | + +### Create a workflow file +Create a file as `.github/workflows/qiita.yml`, and set your own workflow. + +Here is a sample workflow. + ```yaml +# .github/workflows/qiita.yml + name: "GitHub to Qiita" on: @@ -18,11 +58,35 @@ jobs: qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} ``` -## Setup -TBA +Replace a part of the above YAML code with the following. + +| Key | Description | Required | Sample or Default Value | +| --------------------------------------------- | ---------------------------------------------------------------------------------------- | -------- | ----------------------------------- | +| `jobs.qiita.steps[*].with.dir` | Specify a directory in which files you want to track and publish to Qiita | true | `articles` | +| `jobs.qiita.steps[*].with.qiita_access_token` | Specify your Qiita access token (accessible by `${{ secrets.QIITA_ACCESS_TOKEN }}` [^1]) | true | `${{ secrets.QIITA_ACCESS_TOKEN }}` | +| `jobs.qiita.steps[*].with.mapping_filepath` | Specify any file path in which you want to put the mapping file | false | `mapping.txt` | + +[^1]: Only in case you set the secret environment variable name as `QIITA_ACCESS_TOKEN` at the previous step. + +**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at [Tags page](/tags). + +--- + +That’s all! + + + +## How it works +Pushing your articles into the specified branch (`main` branch in the sample workflow above), it starts to work automatically. There is no need to do the further operation. + +You can see whether your workflow succeeded at `https://github.com///actions/workflows/qiita.yml`. + + ## How to contribute TBA -## Important notes + + +## Notice The old implementation has moved to [noraworld/github-to-qiita-server](https://github.com/noraworld/github-to-qiita-server), and it is no longer supported. diff --git a/screenshots/actions_secrets.png b/screenshots/actions_secrets.png new file mode 100644 index 0000000000000000000000000000000000000000..36b5a1ccca2612371edfbadb73d188f497848151 GIT binary patch literal 80619 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 C>x=&Y literal 0 HcmV?d00001 diff --git a/screenshots/generate_qiita_access_token.png b/screenshots/generate_qiita_access_token.png new file mode 100644 index 0000000000000000000000000000000000000000..e20357d900d146c5fb705996df841258563cae45 GIT binary patch literal 82999 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 Pdo*t9+$jF-LFoShnnElv literal 0 HcmV?d00001 diff --git a/screenshots/qiita_access_token.png b/screenshots/qiita_access_token.png new file mode 100644 index 0000000000000000000000000000000000000000..30b0a3cce52c65da1635b29dd49efc854ab03f4c GIT binary patch literal 47425 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 Date: Sun, 13 Mar 2022 18:36:36 +0900 Subject: [PATCH 09/32] Update README Fix and add some wording --- README.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f4ed922..966a429 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,13 @@ # GitHub-to-Qiita +GitHub-to-Qiita lets you integrate your Qiita articles with your GitHub repository. Setting up GitHub-to-Qiita and pushing your articles into your GitHub repository, they will be published to [Qiita](https://qiita.com) automatically. + +Make your writing efficient and save your time with GitHub-to-Qiita! 😉 ## Setup +The setup is easy. You can setup a workflow by following the instructions below. + ### Generate a Qiita access token Navigate to [the Qiita access token generation page](https://qiita.com/settings/tokens/new). @@ -19,7 +24,7 @@ After generating your new access token, it should be going to appear on your scr ![](screenshots/qiita_access_token.png) -**WARNING:** The above screen shot shows a dummy access token, not a real access token. You should not take a screen shot, and must not share it with other people. Please be careful. +**WARNING:** The above screen shot shows a dummy access token, not a real access token. You should not take a screen shot including your access token, and must not share it with other people. Please be careful. ### Set your Qiita access token to your repository Navigate to the Actions secrets creation page, which is accessible at `https://github.com///settings/secrets/actions/new`. @@ -68,7 +73,7 @@ Replace a part of the above YAML code with the following. [^1]: Only in case you set the secret environment variable name as `QIITA_ACCESS_TOKEN` at the previous step. -**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at [Tags page](/tags). +**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at [Tags page](./tags). --- @@ -77,7 +82,7 @@ That’s all! ## How it works -Pushing your articles into the specified branch (`main` branch in the sample workflow above), it starts to work automatically. There is no need to do the further operation. +Pushing your articles in the specific directory (`articles` directory in the sample workflow above) into the specific branch (`main` branch in the sample workflow above), it starts to work automatically. There is no need to do the further operation. You can see whether your workflow succeeded at `https://github.com///actions/workflows/qiita.yml`. @@ -89,4 +94,9 @@ TBA ## Notice -The old implementation has moved to [noraworld/github-to-qiita-server](https://github.com/noraworld/github-to-qiita-server), and it is no longer supported. +The old implementation has moved to [noraworld/github-to-qiita-server](https://github.com/noraworld/github-to-qiita-server), and it is no longer maintained. + + + +## License +All codes of this repository are available under the MIT license. See the [LICENSE](/LICENSE) for more information. From 8ef5b38c7abe2af03cb333e0c45a1da5277dac8a Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 18:55:08 +0900 Subject: [PATCH 10/32] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 966a429..2c484ae 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Navigate to [the Qiita access token generation page](https://qiita.com/settings/ ![](screenshots/generate_qiita_access_token.png) -Enter the following information, and click `Generate token` button. +Enter the following information, and click the `Generate token` button. | Key | Description | Fixed | Sample or Fixed Value | | ----------- | ------------------------------------------------------------------------------------------- | ----- | ------------------------------ | @@ -73,7 +73,7 @@ Replace a part of the above YAML code with the following. [^1]: Only in case you set the secret environment variable name as `QIITA_ACCESS_TOKEN` at the previous step. -**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at [Tags page](./tags). +**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at the [Tags page](tags). --- From e4538c5d5212053ff482c0bdcaf5a003f47789a9 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 18:56:26 +0900 Subject: [PATCH 11/32] Fix relative link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c484ae..2891d29 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ Replace a part of the above YAML code with the following. [^1]: Only in case you set the secret environment variable name as `QIITA_ACCESS_TOKEN` at the previous step. -**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at the [Tags page](tags). +**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at the [Tags page](/../../tags). --- From 6ad91b5b118859b65a1516515f2fdee01dae76c7 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 19:45:20 +0900 Subject: [PATCH 12/32] Update README Add how to contribute --- README.md | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2891d29..51e95de 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,49 @@ You can see whether your workflow succeeded at `https://github.com// Date: Sun, 13 Mar 2022 20:13:27 +0900 Subject: [PATCH 13/32] Update README Add syntax section --- README.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 51e95de..21d98fd 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,31 @@ That’s all! +## Syntax +Your Markdown articles need to include a YAML header like this. + +```yaml +--- +title: "Your awesome article" +topics: ["GitHub Actions", "Ruby", "YAML"] +published: true +--- + +Your article starts here. +``` + +| Key | Description | Type | Constraint | +| ----------- | --------------------------------------------------------------- | ------------------------------------ | ------------ | +| `title` | Specify a title of an article | String | | +| `topics` | Specify tags of an article that describes its attributes | Array[String, ] | Up to 5 tags | +| `published` | Specify whether an article will be posted publicly or privately | Boolean | | + +Note that your article file must start with `---`. + +Additional keys and values are acceptable. They are simply ignored. + + + ## How it works Pushing your articles in the specific directory (`articles` directory in the sample workflow above) into the specific branch (`main` branch in the sample workflow above), it starts to work automatically. There is no need to do the further operation. @@ -106,12 +131,11 @@ topics: ["Foo", "Bar", "Baz"] published: false # <= IMPORTANT!!! --- -# Test This is a test article. ``` ### Environment variables -You need to set the following environment variables for a local debug. +You need to set the following environment variables for a local debug. Note that the environment variables in `.env` are loaded only when a development environment. Here is a sample `.env` file. From c63ebd6007f612fe653b205943ca86681776cf58 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 20:13:49 +0900 Subject: [PATCH 14/32] Fix comment slightly --- main.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.rb b/main.rb index 17ea854..d4f38f0 100644 --- a/main.rb +++ b/main.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# Load if it is not executed via GitHub Actions +# Load if it is NOT executed via GitHub Actions # https://docs.github.com/en/actions/learn-github-actions/environment-variables#default-environment-variables unless ENV['CI'] require 'pry' From c3a3d569902f49cd2a4583b16d2bef90f23c6155 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 20:17:06 +0900 Subject: [PATCH 15/32] Update README --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 21d98fd..6b3723f 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Your Markdown articles need to include a YAML header like this. ```yaml --- -title: "Your awesome article" +title: "Your awesome title" topics: ["GitHub Actions", "Ruby", "YAML"] published: true --- @@ -94,11 +94,11 @@ published: true Your article starts here. ``` -| Key | Description | Type | Constraint | -| ----------- | --------------------------------------------------------------- | ------------------------------------ | ------------ | -| `title` | Specify a title of an article | String | | -| `topics` | Specify tags of an article that describes its attributes | Array[String, ] | Up to 5 tags | -| `published` | Specify whether an article will be posted publicly or privately | Boolean | | +| Key | Description | Type | Constraint | +| ----------- | --------------------------------------------------------------- | -------------------------------------- | ------------ | +| `title` | Specify a title of an article | `String` | | +| `topics` | Specify tags of an article that describes its attributes | `Array[String, ]` | Up to 5 tags | +| `published` | Specify whether an article will be posted publicly or privately | `Boolean` | | Note that your article file must start with `---`. From 6a24a3e104b82ecd8947cde9eb8dd7e3f049a030 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sun, 13 Mar 2022 20:23:53 +0900 Subject: [PATCH 16/32] Update README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b3723f..e8d542a 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,12 @@ Enter the following information, and click the `Generate token` button. | Description | Specify a description so you are easy to understand for what the access token is used later | false | `GitHub to Qiita` | | Scopes | Specify scopes that describe what privilege the access token has | true | `read_qiita` and `write_qiita` | -After generating your new access token, it should be going to appear on your screen. Then copy it. Note that it can be shown only once. If you lose it, regenerate it again. +After generating your new access token, it should be going to appear on your screen. Then copy it. ![](screenshots/qiita_access_token.png) +Note that it can be shown only once. If you lose it, regenerate it again. + **WARNING:** The above screen shot shows a dummy access token, not a real access token. You should not take a screen shot including your access token, and must not share it with other people. Please be careful. ### Set your Qiita access token to your repository From f19f769c5faa17eb1da9ae2656ae3ea6096fc015 Mon Sep 17 00:00:00 2001 From: noraworld Date: Tue, 15 Mar 2022 00:01:51 +0900 Subject: [PATCH 17/32] Show more detailed errors for QiitaAPIError * header * mode * path --- lib/error.rb | 10 ++++++++-- lib/qiita.rb | 11 ++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/error.rb b/lib/error.rb index 52cb385..7e56fb6 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -68,8 +68,14 @@ def initialize(msg: 'A Qiita item ID is invalid.') end class QiitaAPIError < StandardError - def initialize(msg: 'A Qiita API returns a non-succeeded status.', response: nil) - msg += " Status code: #{response.status}, Response body: #{JSON.parse(response.body)}" unless response.nil? + def initialize(msg: 'A Qiita API returns a non-succeeded status.', data: nil) + unless data.nil? + msg += " Status code: #{data[:response].status}," \ + " Response body: #{JSON.parse(data[:response].body)}," \ + " Header: #{data[:header]}," \ + " Mode: \"#{data[:mode]}\", Path: \"#{data[:path]}\"" + end + super(msg) end end diff --git a/lib/qiita.rb b/lib/qiita.rb index 9d715b7..0167291 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -37,7 +37,16 @@ def publish connection.patch(&request_params) end - raise QiitaAPIError.new(response: response) unless response.status >= 200 && response.status < 300 + unless response.status >= 200 && response.status < 300 + raise QiitaAPIError.new( + data: { + response: response, + header: @header, + mode: @mode, + path: @path + } + ) + end JSON.parse(response.body) end From 5c17d192036a25d863526ce1b63d964ed8de80b5 Mon Sep 17 00:00:00 2001 From: noraworld Date: Tue, 15 Mar 2022 01:03:27 +0900 Subject: [PATCH 18/32] Show content for QiitaAPIError --- lib/error.rb | 15 ++++++++++++++- lib/qiita.rb | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/error.rb b/lib/error.rb index 7e56fb6..4d388ca 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -68,14 +68,27 @@ def initialize(msg: 'A Qiita item ID is invalid.') end class QiitaAPIError < StandardError + TRUNCATED_LENGTH = 100 + OMISSION = '...' + def initialize(msg: 'A Qiita API returns a non-succeeded status.', data: nil) unless data.nil? msg += " Status code: #{data[:response].status}," \ " Response body: #{JSON.parse(data[:response].body)}," \ + " Content: #{truncate_content(data[:content])}," \ " Header: #{data[:header]}," \ - " Mode: \"#{data[:mode]}\", Path: \"#{data[:path]}\"" + " Mode: \"#{data[:mode]}\"," \ + " Path: \"#{data[:path]}\"" end super(msg) end + + private + + def truncate_content(content) + omission = content.length > TRUNCATED_LENGTH ? OMISSION : '' + + "#{content.to_json.chop[0..TRUNCATED_LENGTH]}#{omission}\"" + end end diff --git a/lib/qiita.rb b/lib/qiita.rb index 0167291..6f60ff7 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -41,6 +41,7 @@ def publish raise QiitaAPIError.new( data: { response: response, + content: @content, header: @header, mode: @mode, path: @path From c470648d93eb6eeb66f130a8b74dd8bd0341fa87 Mon Sep 17 00:00:00 2001 From: noraworld Date: Tue, 15 Mar 2022 01:35:11 +0900 Subject: [PATCH 19/32] Show request data instead of instance variables --- lib/error.rb | 20 ++++++++++++++------ lib/qiita.rb | 2 -- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/error.rb b/lib/error.rb index 4d388ca..ddaae02 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -74,9 +74,10 @@ class QiitaAPIError < StandardError def initialize(msg: 'A Qiita API returns a non-succeeded status.', data: nil) unless data.nil? msg += " Status code: #{data[:response].status}," \ + " Request headers: #{conceal_token(data[:response].env.request_headers)}," \ + " Request body: #{JSON.parse(data[:response].env.request_body)}," \ + " Response headers: #{data[:response].headers}," \ " Response body: #{JSON.parse(data[:response].body)}," \ - " Content: #{truncate_content(data[:content])}," \ - " Header: #{data[:header]}," \ " Mode: \"#{data[:mode]}\"," \ " Path: \"#{data[:path]}\"" end @@ -86,9 +87,16 @@ def initialize(msg: 'A Qiita API returns a non-succeeded status.', data: nil) private - def truncate_content(content) - omission = content.length > TRUNCATED_LENGTH ? OMISSION : '' - - "#{content.to_json.chop[0..TRUNCATED_LENGTH]}#{omission}\"" + def conceal_token(headers) + # Do NOT return this value because Hash#delete returns a DELETED value + # + # { foo: 42, bar: 'Lorem ipsum', want_to_delete: 'deleted_value' }.delete(:want_to_delete) + # => "deleted_value" + # + # Do return a receiver object instead + # + headers.delete('Authorization') + + headers end end diff --git a/lib/qiita.rb b/lib/qiita.rb index 6f60ff7..75d3724 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -41,8 +41,6 @@ def publish raise QiitaAPIError.new( data: { response: response, - content: @content, - header: @header, mode: @mode, path: @path } From 7cb850a7bbf9a3b23eb7896c0e1e8c5c50d798c6 Mon Sep 17 00:00:00 2001 From: noraworld Date: Tue, 15 Mar 2022 14:54:54 +0900 Subject: [PATCH 20/32] Validate headers, especially topics, strictly --- lib/error.rb | 6 +++--- lib/validator.rb | 51 +++++++++++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/lib/error.rb b/lib/error.rb index ddaae02..27e8838 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -13,19 +13,19 @@ def initialize(msg: 'A mapping filepath is not found. The env MAPPING_FILEPATH i end class InvalidHeaderTitleError < StandardError - def initialize(msg: 'A title of an article is missing or invalid.') + def initialize(msg: 'A title of an article is invalid.') super(msg) end end class InvalidHeaderTopicsError < StandardError - def initialize(msg: 'Topics of an article are missing or invalid.') + def initialize(msg: 'Topics of an article are invalid.') super(msg) end end class InvalidHeaderPublishedError < StandardError - def initialize(msg: 'A published flag of an article is missing or invalid.') + def initialize(msg: 'A published flag of an article is invalid.') super(msg) end end diff --git a/lib/validator.rb b/lib/validator.rb index f194f58..05c7b3f 100644 --- a/lib/validator.rb +++ b/lib/validator.rb @@ -15,9 +15,9 @@ def env # Check required header params def header(params) - raise InvalidHeaderTitleError unless title_valid?(params['title']) - raise InvalidHeaderTopicsError unless topics_valid?(params['topics']) - raise InvalidHeaderPublishedError unless published_valid?(params['published']) + title(params['title']) + topics(params['topics']) + published(params['published']) end def mode(param) @@ -30,28 +30,39 @@ def item_id(id) private - def title_valid?(param) - return false if param.nil? - return false unless param.is_a?(String) - return false if param.empty? - - true + def title(param) + raise InvalidHeaderTitleError.new(msg: 'A title of an article is missing.') if param.nil? + raise InvalidHeaderTitleError.new(msg: 'A title of an article must be a string.') unless param.is_a?(String) + raise InvalidHeaderTitleError.new(msg: 'A title of an article must not be empty.') if param.empty? end - def topics_valid?(params) - return false if params.nil? - return false unless params.is_a?(Array) - return false if params.empty? - return false unless params.all? { |element| element.is_a?(String) } - return false if params.any? { |element| element.empty? } + def topics(params) + raise InvalidHeaderTopicsError.new(msg: 'Topics of an article are missing.') if params.nil? + raise InvalidHeaderTopicsError.new(msg: 'Topics of an article must be an array.') unless params.is_a?(Array) + raise InvalidHeaderTopicsError.new(msg: 'Topics of an article must not be empty.') if params.empty? + + unless params.all? { |element| element.is_a?(String) } + raise InvalidHeaderTopicsError.new(msg: 'All the elements of topics must be a string.') + end + + if params.any? { |element| element.empty? } + raise InvalidHeaderTopicsError.new(msg: 'The elements of topics must not be empty.') + end + + if (params.count - params.uniq.count).positive? + raise InvalidHeaderTopicsError.new(msg: 'There are duplicated topics.') + end - true + if params.any? { |param| param.include?(' ') } + raise InvalidHeaderTopicsError.new(msg: 'A topic including spaces is not acceptable.') + end end - def published_valid?(param) - return false if param.nil? - return false if param != true && param != false + def published(param) + raise InvalidHeaderPublishedError.new(msg: 'A published flag of an article is missing.') if param.nil? - true + if param != true && param != false + raise InvalidHeaderPublishedError.new(msg: 'A published flag of an article must be true or false.') + end end end From 99e3a4007b72ec7603340dfa293093a90af527ef Mon Sep 17 00:00:00 2001 From: noraworld Date: Tue, 15 Mar 2022 22:16:28 +0900 Subject: [PATCH 21/32] Add README for Japanese This fixes #11 --- README.md | 171 +-------------------------------------------------- README/en.md | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++ README/ja.md | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 341 insertions(+), 170 deletions(-) mode change 100644 => 120000 README.md create mode 100644 README/en.md create mode 100644 README/ja.md diff --git a/README.md b/README.md deleted file mode 100644 index e8d542a..0000000 --- a/README.md +++ /dev/null @@ -1,170 +0,0 @@ -# GitHub-to-Qiita -GitHub-to-Qiita lets you integrate your Qiita articles with your GitHub repository. Setting up GitHub-to-Qiita and pushing your articles into your GitHub repository, they will be published to [Qiita](https://qiita.com) automatically. - -Make your writing efficient and save your time with GitHub-to-Qiita! 😉 - - - -## Setup -The setup is easy. You can setup a workflow by following the instructions below. - -### Generate a Qiita access token -Navigate to [the Qiita access token generation page](https://qiita.com/settings/tokens/new). - -![](screenshots/generate_qiita_access_token.png) - -Enter the following information, and click the `Generate token` button. - -| Key | Description | Fixed | Sample or Fixed Value | -| ----------- | ------------------------------------------------------------------------------------------- | ----- | ------------------------------ | -| Description | Specify a description so you are easy to understand for what the access token is used later | false | `GitHub to Qiita` | -| Scopes | Specify scopes that describe what privilege the access token has | true | `read_qiita` and `write_qiita` | - -After generating your new access token, it should be going to appear on your screen. Then copy it. - -![](screenshots/qiita_access_token.png) - -Note that it can be shown only once. If you lose it, regenerate it again. - -**WARNING:** The above screen shot shows a dummy access token, not a real access token. You should not take a screen shot including your access token, and must not share it with other people. Please be careful. - -### Set your Qiita access token to your repository -Navigate to the Actions secrets creation page, which is accessible at `https://github.com///settings/secrets/actions/new`. - -![](screenshots/actions_secrets.png) - -Enter the following information, and click the `Add secret` button. - -| Key | Description | Sample Value | -| ----- | ------------------------------------------------------------------------- | --------------------------------------------------------------- | -| Name | Specify your secret environment variable name for your Qiita access token | `QIITA_ACCESS_TOKEN` | -| Value | Specify your Qiita access token | `7ace9cfa98815ed3d5cd1e1bba8e745c152e9071` (THIS IS A SAMPLE!!) | - -### Create a workflow file -Create a file as `.github/workflows/qiita.yml`, and set your own workflow. - -Here is a sample workflow. - -```yaml -# .github/workflows/qiita.yml - -name: "GitHub to Qiita" - -on: - push: - branches: [ main ] - -jobs: - qiita: - runs-on: ubuntu-latest - steps: - - name: "Publish to Qiita" - uses: noraworld/github-to-qiita@v0.1.0 - with: - dir: "articles" - qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} -``` - -Replace a part of the above YAML code with the following. - -| Key | Description | Required | Sample or Default Value | -| --------------------------------------------- | ---------------------------------------------------------------------------------------- | -------- | ----------------------------------- | -| `jobs.qiita.steps[*].with.dir` | Specify a directory in which files you want to track and publish to Qiita | true | `articles` | -| `jobs.qiita.steps[*].with.qiita_access_token` | Specify your Qiita access token (accessible by `${{ secrets.QIITA_ACCESS_TOKEN }}` [^1]) | true | `${{ secrets.QIITA_ACCESS_TOKEN }}` | -| `jobs.qiita.steps[*].with.mapping_filepath` | Specify any file path in which you want to put the mapping file | false | `mapping.txt` | - -[^1]: Only in case you set the secret environment variable name as `QIITA_ACCESS_TOKEN` at the previous step. - -**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at the [Tags page](/../../tags). - ---- - -That’s all! - - - -## Syntax -Your Markdown articles need to include a YAML header like this. - -```yaml ---- -title: "Your awesome title" -topics: ["GitHub Actions", "Ruby", "YAML"] -published: true ---- - -Your article starts here. -``` - -| Key | Description | Type | Constraint | -| ----------- | --------------------------------------------------------------- | -------------------------------------- | ------------ | -| `title` | Specify a title of an article | `String` | | -| `topics` | Specify tags of an article that describes its attributes | `Array[String, ]` | Up to 5 tags | -| `published` | Specify whether an article will be posted publicly or privately | `Boolean` | | - -Note that your article file must start with `---`. - -Additional keys and values are acceptable. They are simply ignored. - - - -## How it works -Pushing your articles in the specific directory (`articles` directory in the sample workflow above) into the specific branch (`main` branch in the sample workflow above), it starts to work automatically. There is no need to do the further operation. - -You can see whether your workflow succeeded at `https://github.com///actions/workflows/qiita.yml`. - - - -## How to contribute -The files and directories for a local development are as follow. - -* `.env` -* `mapping.txt` -* `articles/` - -These are ignored for Git (described in `.gitignore`), so you can create sample data and use them to test how it works. - -**WARNING:** The `published` key in a YAML header in a sample article (files in `articles/`) should be always set to `false`, or your sample article will be exposed publicly! - -```yaml ---- -title: "Test" -topics: ["Foo", "Bar", "Baz"] -published: false # <= IMPORTANT!!! ---- - -This is a test article. -``` - -### Environment variables -You need to set the following environment variables for a local debug. Note that the environment variables in `.env` are loaded only when a development environment. - -Here is a sample `.env` file. - -```ruby -ADDED_FILES="articles/test01.md" -MODIFIED_FILES="articles/test02.md" -MAPPING_FILEPATH="mapping.txt" -QIITA_ACCESS_TOKEN="7f6c7aec310ded84ae3acfe8f920cb1c7556c7d3" # THIS IS A SAMPLE!! -``` - -| Environment Variable Name | Description | Required | -| ------------------------- | ---------------------------------------------------------- | -------- | -| `ADDED_FILES` | Paths of articles that will be published newly | false | -| `MODIFIED_FILES` | Paths of articles that will be modified | false | -| `MAPPING_FILEPATH` | A filepath to which file it writes the mapping information | true | -| `QIITA_ACCESS_TOKEN` | Your Qiita access token (for development) | true | - -**NOTE:** It is highly recommended to use the Qiita access token that is different from one for a production use. - -You can omit either `ADDED_FILES` or `MODIFIED_FILES`, but if both are omitted, it does nothing. - - - -## Notice -The old implementation has moved to [noraworld/github-to-qiita-server](https://github.com/noraworld/github-to-qiita-server), and it is no longer maintained. - - - -## License -All codes of this repository are available under the MIT license. See the [LICENSE](/LICENSE) for more information. diff --git a/README.md b/README.md new file mode 120000 index 0000000..1f65b1d --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +README/en.md \ No newline at end of file diff --git a/README/en.md b/README/en.md new file mode 100644 index 0000000..e8d542a --- /dev/null +++ b/README/en.md @@ -0,0 +1,170 @@ +# GitHub-to-Qiita +GitHub-to-Qiita lets you integrate your Qiita articles with your GitHub repository. Setting up GitHub-to-Qiita and pushing your articles into your GitHub repository, they will be published to [Qiita](https://qiita.com) automatically. + +Make your writing efficient and save your time with GitHub-to-Qiita! 😉 + + + +## Setup +The setup is easy. You can setup a workflow by following the instructions below. + +### Generate a Qiita access token +Navigate to [the Qiita access token generation page](https://qiita.com/settings/tokens/new). + +![](screenshots/generate_qiita_access_token.png) + +Enter the following information, and click the `Generate token` button. + +| Key | Description | Fixed | Sample or Fixed Value | +| ----------- | ------------------------------------------------------------------------------------------- | ----- | ------------------------------ | +| Description | Specify a description so you are easy to understand for what the access token is used later | false | `GitHub to Qiita` | +| Scopes | Specify scopes that describe what privilege the access token has | true | `read_qiita` and `write_qiita` | + +After generating your new access token, it should be going to appear on your screen. Then copy it. + +![](screenshots/qiita_access_token.png) + +Note that it can be shown only once. If you lose it, regenerate it again. + +**WARNING:** The above screen shot shows a dummy access token, not a real access token. You should not take a screen shot including your access token, and must not share it with other people. Please be careful. + +### Set your Qiita access token to your repository +Navigate to the Actions secrets creation page, which is accessible at `https://github.com///settings/secrets/actions/new`. + +![](screenshots/actions_secrets.png) + +Enter the following information, and click the `Add secret` button. + +| Key | Description | Sample Value | +| ----- | ------------------------------------------------------------------------- | --------------------------------------------------------------- | +| Name | Specify your secret environment variable name for your Qiita access token | `QIITA_ACCESS_TOKEN` | +| Value | Specify your Qiita access token | `7ace9cfa98815ed3d5cd1e1bba8e745c152e9071` (THIS IS A SAMPLE!!) | + +### Create a workflow file +Create a file as `.github/workflows/qiita.yml`, and set your own workflow. + +Here is a sample workflow. + +```yaml +# .github/workflows/qiita.yml + +name: "GitHub to Qiita" + +on: + push: + branches: [ main ] + +jobs: + qiita: + runs-on: ubuntu-latest + steps: + - name: "Publish to Qiita" + uses: noraworld/github-to-qiita@v0.1.0 + with: + dir: "articles" + qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} +``` + +Replace a part of the above YAML code with the following. + +| Key | Description | Required | Sample or Default Value | +| --------------------------------------------- | ---------------------------------------------------------------------------------------- | -------- | ----------------------------------- | +| `jobs.qiita.steps[*].with.dir` | Specify a directory in which files you want to track and publish to Qiita | true | `articles` | +| `jobs.qiita.steps[*].with.qiita_access_token` | Specify your Qiita access token (accessible by `${{ secrets.QIITA_ACCESS_TOKEN }}` [^1]) | true | `${{ secrets.QIITA_ACCESS_TOKEN }}` | +| `jobs.qiita.steps[*].with.mapping_filepath` | Specify any file path in which you want to put the mapping file | false | `mapping.txt` | + +[^1]: Only in case you set the secret environment variable name as `QIITA_ACCESS_TOKEN` at the previous step. + +**WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at the [Tags page](/../../tags). + +--- + +That’s all! + + + +## Syntax +Your Markdown articles need to include a YAML header like this. + +```yaml +--- +title: "Your awesome title" +topics: ["GitHub Actions", "Ruby", "YAML"] +published: true +--- + +Your article starts here. +``` + +| Key | Description | Type | Constraint | +| ----------- | --------------------------------------------------------------- | -------------------------------------- | ------------ | +| `title` | Specify a title of an article | `String` | | +| `topics` | Specify tags of an article that describes its attributes | `Array[String, ]` | Up to 5 tags | +| `published` | Specify whether an article will be posted publicly or privately | `Boolean` | | + +Note that your article file must start with `---`. + +Additional keys and values are acceptable. They are simply ignored. + + + +## How it works +Pushing your articles in the specific directory (`articles` directory in the sample workflow above) into the specific branch (`main` branch in the sample workflow above), it starts to work automatically. There is no need to do the further operation. + +You can see whether your workflow succeeded at `https://github.com///actions/workflows/qiita.yml`. + + + +## How to contribute +The files and directories for a local development are as follow. + +* `.env` +* `mapping.txt` +* `articles/` + +These are ignored for Git (described in `.gitignore`), so you can create sample data and use them to test how it works. + +**WARNING:** The `published` key in a YAML header in a sample article (files in `articles/`) should be always set to `false`, or your sample article will be exposed publicly! + +```yaml +--- +title: "Test" +topics: ["Foo", "Bar", "Baz"] +published: false # <= IMPORTANT!!! +--- + +This is a test article. +``` + +### Environment variables +You need to set the following environment variables for a local debug. Note that the environment variables in `.env` are loaded only when a development environment. + +Here is a sample `.env` file. + +```ruby +ADDED_FILES="articles/test01.md" +MODIFIED_FILES="articles/test02.md" +MAPPING_FILEPATH="mapping.txt" +QIITA_ACCESS_TOKEN="7f6c7aec310ded84ae3acfe8f920cb1c7556c7d3" # THIS IS A SAMPLE!! +``` + +| Environment Variable Name | Description | Required | +| ------------------------- | ---------------------------------------------------------- | -------- | +| `ADDED_FILES` | Paths of articles that will be published newly | false | +| `MODIFIED_FILES` | Paths of articles that will be modified | false | +| `MAPPING_FILEPATH` | A filepath to which file it writes the mapping information | true | +| `QIITA_ACCESS_TOKEN` | Your Qiita access token (for development) | true | + +**NOTE:** It is highly recommended to use the Qiita access token that is different from one for a production use. + +You can omit either `ADDED_FILES` or `MODIFIED_FILES`, but if both are omitted, it does nothing. + + + +## Notice +The old implementation has moved to [noraworld/github-to-qiita-server](https://github.com/noraworld/github-to-qiita-server), and it is no longer maintained. + + + +## License +All codes of this repository are available under the MIT license. See the [LICENSE](/LICENSE) for more information. diff --git a/README/ja.md b/README/ja.md new file mode 100644 index 0000000..03ea2d8 --- /dev/null +++ b/README/ja.md @@ -0,0 +1,170 @@ +# GitHub-to-Qiita +GitHub-to-Qiita を使用すると、Qiita の記事を GitHub リポジトリに統合できます。GitHub-to-Qiita を設定し、記事を GitHub リポジトリにプッシュすると、記事は自動的に [Qiita](https://qiita.com) に公開されます。 + +執筆作業を効率化して時間を節約しましょう! 😉 + + + +## セットアップ +セットアップは簡単です。以下の手順に沿ってワークフローを設定します。 + +### Qiita アクセストークンの生成 +[Qiita のアクセストークン生成ページ](https://qiita.com/settings/tokens/new) にアクセスします。 + +![](screenshots/generate_qiita_access_token.png) + +以下の情報を入力し、トークン生成ボタンをクリックします。 + +| キー | 説明 | 固定値かどうか | サンプル値または固定値 | +| --- | --- | --- | --- | +| Description | そのアクセストークンの使用用途をあとで把握しやすいように説明を入力します | false | `GitHub to Qiita` | +| Scopes | アクセストークンの権限を指定します | true | `read_qiita` and `write_qiita` | + +アクセストークンを生成すると画面に表示されるのでコピーしておきます。 + +![](screenshots/qiita_access_token.png) + +アクセストークンは一度しか表示されません。わからなくなった場合は再生成してください。 + +**WARNING:** 上記のスクリーンショットにあるアクセストークンはダミーの値です。アクセストークンを含むスクリーンショットを撮ったりアクセストークンを他の人に教えたりしないでください。 + +### Qiita アクセストークンをリポジトリに設定 +リポジトリのシークレット作成ページにアクセスします。`https://github.com///settings/secrets/actions/new` という URL でアクセスできます。 + +![](screenshots/actions_secrets.png) + +以下の情報を入力し、`Add secret` ボタンをクリックします。 + +| キー | 説明 | サンプル値 | +| --- | --- | --- | +| Name | Qiita アクセストークンを格納するための名前を入力します | `QIITA_ACCESS_TOKEN` | +| Value | Qiita アクセストークンを入力します | `7ace9cfa98815ed3d5cd1e1bba8e745c152e9071` (これはサンプル値です!!) | + +### ワークフローファイルの作成 +ファイル名を `.github/workflows/qiita.yml` としてファイルを作成し、ワークフローを設定します。 + +以下は例です。 + +```yaml +# .github/workflows/qiita.yml + +name: "GitHub to Qiita" + +on: + push: + branches: [ main ] + +jobs: + qiita: + runs-on: ubuntu-latest + steps: + - name: "Publish to Qiita" + uses: noraworld/github-to-qiita@v0.1.0 + with: + dir: "articles" + qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} +``` + +上記の YAML コードの一部を以下の情報に置き換えます。 + +| キー | 説明 | 必須かどうか | サンプル値またはデフォルト値 | +| --- | --- | --- | --- | +| `jobs.qiita.steps[*].with.dir` | Qiita に投稿したい記事が格納されているディレクトリを指定します | true | `articles` | +| `jobs.qiita.steps[*].with.qiita_access_token` | Qiita アクセストークンを指定します (`${{ secrets.QIITA_ACCESS_TOKEN }}` で参照できます [^1]) | true | `${{ secrets.QIITA_ACCESS_TOKEN }}` | +| `jobs.qiita.steps[*].with.mapping_filepath` | マッピングファイルのパスを指定します | false | `mapping.txt` | + +[^1]: 一つ前の手順でリポジトリに設定した環境変数名が `QIITA_ACCESS_TOKEN` である場合のみ。 + +**WARNING:** 最新版のコードはバグを含んでいたり仕様が頻繁に変わったりする可能性があるため、`jobs.qiita.steps[*].uses` でバージョンを `@main` に設定しないでください。最新のタグのバージョンを指定することをおすすめします。タグ一覧は [Tags](/../../tags) からアクセスできます。 + +--- + +設定はこれで以上となります。 + + + +## 記述ルール +記事の Markdown ファイルには以下のような YAML ヘッダをつける必要があります。 + +```yaml +--- +title: "Your awesome title" +topics: ["GitHub Actions", "Ruby", "YAML"] +published: true +--- + +Your article starts here. +``` + +| キー | 説明 | 型 | 制約 | +| --- | --- | --- | --- | +| `title` | 記事のタイトルを指定します | 文字列 | | +| `topics` | 記事のタグを指定します | 配列[文字列, <文字列, 文字列, ...>] | タグの数は 1 〜 5 個まで | +| `published` | 一般公開するか限定共有にするかを指定します | 真偽値 | | + +記事のファイルは `---` から始める必要があります。 + +追加のキーや値を含めることができます。これらは単純に無視されます。 + + + +## 動作方法 +特定のディレクトリ内 (上記のワークフローの例でいう `articles` ディレクトリ) の記事を特定のブランチ (上記のワークフローの例でいう `main` ブランチ) にプッシュすると、自動的に動作します。追加の操作は必要ありません。 + +ワークフローが正常に動作したかどうかは `https://github.com///actions/workflows/qiita.yml` で確認できます。 + + + +## 開発に参加する方法 +ローカル開発用のファイルやディレクトリは以下のとおりです。 + +* `.env` +* `mapping.txt` +* `articles/` + +上記のファイルやディレクトリは Git で無視される (`.gitignore` に記載されている) ため、動作確認用にデータを入れて使用することができます。 + +**WARNING:** `articles` ディレクトリ内の記事の YAML ヘッダの `published` は常に `false` に設定しておいてください。`true` に設定すると、開発用のテスト記事が一般公開されてしまいます。 + +```yaml +--- +title: "Test" +topics: ["Foo", "Bar", "Baz"] +published: false # <= 重要!!! +--- + +This is a test article. +``` + +### 環境変数 +ローカル開発のデバッグ用に以下の環境変数を設定する必要があります。`.env` ファイルは開発環境でのみロードされます。 + +以下は `.env` ファイルの例です。 + +```ruby +ADDED_FILES="articles/test01.md" +MODIFIED_FILES="articles/test02.md" +MAPPING_FILEPATH="mapping.txt" +QIITA_ACCESS_TOKEN="7f6c7aec310ded84ae3acfe8f920cb1c7556c7d3" # これはサンプル値です!! +``` + +| 環境変数名 | 説明 | 必須かどうか | +| --- | --- | --- | +| `ADDED_FILES` | 新しく投稿される記事のパス | false | +| `MODIFIED_FILES` | 編集される記事のパス | false | +| `MAPPING_FILEPATH` | マッピング情報を格納するファイルのパス | true | +| `QIITA_ACCESS_TOKEN` | Qiita アクセストークン (開発用) | true | + +**NOTE:** 本番用とは異なる Qiita アクセストークンを使用することをおすすめします。 + +`ADDED_FILES` または `MODIFIED_FILES` のいずれかを省略することができますが、両方とも省略した場合は何も実行されません。 + + + +## お知らせ +古い実装は [noraworld/github-to-qiita-server](https://github.com/noraworld/github-to-qiita-server) に移動し、メンテナンスされなくなりました。 + + + +## ライセンス +本リポジトリ内のすべてのコードは MIT ライセンスに基づき利用することができます。詳細は [LICENSE](/LICENSE) をご覧ください。 From d3f2b6c67cceb1cdcb87d811d1d52c7f185c9507 Mon Sep 17 00:00:00 2001 From: noraworld Date: Tue, 15 Mar 2022 22:19:44 +0900 Subject: [PATCH 22/32] Fix relative links --- README/en.md | 6 +++--- README/ja.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README/en.md b/README/en.md index e8d542a..b07f231 100644 --- a/README/en.md +++ b/README/en.md @@ -11,7 +11,7 @@ The setup is easy. You can setup a workflow by following the instructions below. ### Generate a Qiita access token Navigate to [the Qiita access token generation page](https://qiita.com/settings/tokens/new). -![](screenshots/generate_qiita_access_token.png) +![](/screenshots/generate_qiita_access_token.png) Enter the following information, and click the `Generate token` button. @@ -22,7 +22,7 @@ Enter the following information, and click the `Generate token` button. After generating your new access token, it should be going to appear on your screen. Then copy it. -![](screenshots/qiita_access_token.png) +![](/screenshots/qiita_access_token.png) Note that it can be shown only once. If you lose it, regenerate it again. @@ -31,7 +31,7 @@ Note that it can be shown only once. If you lose it, regenerate it again. ### Set your Qiita access token to your repository Navigate to the Actions secrets creation page, which is accessible at `https://github.com///settings/secrets/actions/new`. -![](screenshots/actions_secrets.png) +![](/screenshots/actions_secrets.png) Enter the following information, and click the `Add secret` button. diff --git a/README/ja.md b/README/ja.md index 03ea2d8..8eedb0a 100644 --- a/README/ja.md +++ b/README/ja.md @@ -11,7 +11,7 @@ GitHub-to-Qiita を使用すると、Qiita の記事を GitHub リポジトリ ### Qiita アクセストークンの生成 [Qiita のアクセストークン生成ページ](https://qiita.com/settings/tokens/new) にアクセスします。 -![](screenshots/generate_qiita_access_token.png) +![](/screenshots/generate_qiita_access_token.png) 以下の情報を入力し、トークン生成ボタンをクリックします。 @@ -22,7 +22,7 @@ GitHub-to-Qiita を使用すると、Qiita の記事を GitHub リポジトリ アクセストークンを生成すると画面に表示されるのでコピーしておきます。 -![](screenshots/qiita_access_token.png) +![](/screenshots/qiita_access_token.png) アクセストークンは一度しか表示されません。わからなくなった場合は再生成してください。 @@ -31,7 +31,7 @@ GitHub-to-Qiita を使用すると、Qiita の記事を GitHub リポジトリ ### Qiita アクセストークンをリポジトリに設定 リポジトリのシークレット作成ページにアクセスします。`https://github.com///settings/secrets/actions/new` という URL でアクセスできます。 -![](screenshots/actions_secrets.png) +![](/screenshots/actions_secrets.png) 以下の情報を入力し、`Add secret` ボタンをクリックします。 From d5bcce9b9cb38bfdee77f5fa8e2d136f2f85b834 Mon Sep 17 00:00:00 2001 From: noraworld Date: Tue, 15 Mar 2022 22:22:51 +0900 Subject: [PATCH 23/32] Add links to other language README each other --- README/en.md | 2 ++ README/ja.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/README/en.md b/README/en.md index b07f231..11a8953 100644 --- a/README/en.md +++ b/README/en.md @@ -1,4 +1,6 @@ # GitHub-to-Qiita +| **English** | [日本語](/README/ja.md) | + GitHub-to-Qiita lets you integrate your Qiita articles with your GitHub repository. Setting up GitHub-to-Qiita and pushing your articles into your GitHub repository, they will be published to [Qiita](https://qiita.com) automatically. Make your writing efficient and save your time with GitHub-to-Qiita! 😉 diff --git a/README/ja.md b/README/ja.md index 8eedb0a..9ed406b 100644 --- a/README/ja.md +++ b/README/ja.md @@ -1,4 +1,6 @@ # GitHub-to-Qiita +| [English](/README/en.md) | **日本語** | + GitHub-to-Qiita を使用すると、Qiita の記事を GitHub リポジトリに統合できます。GitHub-to-Qiita を設定し、記事を GitHub リポジトリにプッシュすると、記事は自動的に [Qiita](https://qiita.com) に公開されます。 執筆作業を効率化して時間を節約しましょう! 😉 From 7fe2b19a140bee82cfdf6eb4c85eb4dcfd55088e Mon Sep 17 00:00:00 2001 From: noraworld Date: Wed, 16 Mar 2022 00:46:52 +0900 Subject: [PATCH 24/32] Update README Bump version to 0.2.0 --- README/en.md | 2 +- README/ja.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README/en.md b/README/en.md index 11a8953..7768d3f 100644 --- a/README/en.md +++ b/README/en.md @@ -61,7 +61,7 @@ jobs: runs-on: ubuntu-latest steps: - name: "Publish to Qiita" - uses: noraworld/github-to-qiita@v0.1.0 + uses: noraworld/github-to-qiita@v0.2.0 with: dir: "articles" qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} diff --git a/README/ja.md b/README/ja.md index 9ed406b..3fa89a3 100644 --- a/README/ja.md +++ b/README/ja.md @@ -61,7 +61,7 @@ jobs: runs-on: ubuntu-latest steps: - name: "Publish to Qiita" - uses: noraworld/github-to-qiita@v0.1.0 + uses: noraworld/github-to-qiita@v0.2.0 with: dir: "articles" qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} From 70400b2ad66d568bde977ee3001b1bdc9475b6e8 Mon Sep 17 00:00:00 2001 From: noraworld Date: Wed, 16 Mar 2022 00:54:25 +0900 Subject: [PATCH 25/32] Use success? method instead of checking status --- lib/qiita.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/qiita.rb b/lib/qiita.rb index 75d3724..c04e6cb 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -37,7 +37,7 @@ def publish connection.patch(&request_params) end - unless response.status >= 200 && response.status < 300 + unless response.success? raise QiitaAPIError.new( data: { response: response, From 9a170193106adf41e566a3561cfaba87f1d42e36 Mon Sep 17 00:00:00 2001 From: noraworld Date: Wed, 16 Mar 2022 00:59:10 +0900 Subject: [PATCH 26/32] Split constant into API version and endpoint --- lib/qiita.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/qiita.rb b/lib/qiita.rb index c04e6cb..658d196 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -4,7 +4,8 @@ class Qiita API_BASE_URL = 'https://qiita.com' - API_ITEM_ENDPOINT = '/api/v2/items' + API_VERSION = 'v2' + API_ITEM_ENDPOINT = "/api/#{API_VERSION}/items" # @content: String: A content of an article # @header: Hash: A YAML header of an article From 35822c8a1c1fdec07730535e47233153887d237f Mon Sep 17 00:00:00 2001 From: noraworld Date: Wed, 16 Mar 2022 19:40:16 +0900 Subject: [PATCH 27/32] Avoid installing gems for development on GitHub Actions This fixes #14 --- Gemfile | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 2c5db4a..a921aed 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,18 @@ ruby '3.1.1' gem 'faraday' -group :development, :test do +# For development +# +# These gems should be installed only for development environment, but +# `bundle config set --local without 'development,test'` cannot be +# used because it stores the configuration in `.bundle/config`, and +# this file is hard to track on Git +# +# By the way, `--without` option is deprecated +# +# ENV['CI'] is only set on GitHub Actions +# +unless ENV['CI'] gem 'dotenv' gem 'pry-byebug' end From c073195dde4e5bbb9fc3733b3114c1e5a53d5eb1 Mon Sep 17 00:00:00 2001 From: noraworld Date: Wed, 16 Mar 2022 23:04:21 +0900 Subject: [PATCH 28/32] Add option strict This fixes #13 --- action.yml | 5 +++++ lib/error.rb | 6 ++++++ lib/qiita.rb | 53 +++++++++++++++++++++++++++++++++++++++--------- lib/validator.rb | 5 +++++ main.rb | 3 +-- 5 files changed, 60 insertions(+), 12 deletions(-) diff --git a/action.yml b/action.yml index 65fad31..d5a7395 100644 --- a/action.yml +++ b/action.yml @@ -16,6 +16,10 @@ inputs: description: "Specify any file path in which you want to put the mapping file" required: false default: "mapping.txt" + strict: + description: "Specify whether the strict mode is on or off" + required: false + default: false added_files: description: "Get added files" modified_files: @@ -63,6 +67,7 @@ runs: env: QIITA_ACCESS_TOKEN: ${{ inputs.qiita_access_token }} MAPPING_FILEPATH: ${{ inputs.mapping_filepath }} + STRICT: ${{ inputs.strict }} GITHUB_ACTION_PATH: ${{ github.action_path }} ADDED_FILES: ${{ steps.get-added-files.outputs.files }} MODIFIED_FILES: ${{ steps.get-modified-files.outputs.files }} diff --git a/lib/error.rb b/lib/error.rb index 27e8838..acf86e1 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -12,6 +12,12 @@ def initialize(msg: 'A mapping filepath is not found. The env MAPPING_FILEPATH i end end +class InvalidStrictError < StandardError + def initialize(msg: 'The env STRICT is invalid.') + super(msg) + end +end + class InvalidHeaderTitleError < StandardError def initialize(msg: 'A title of an article is invalid.') super(msg) diff --git a/lib/qiita.rb b/lib/qiita.rb index 658d196..4317f8c 100644 --- a/lib/qiita.rb +++ b/lib/qiita.rb @@ -31,10 +31,9 @@ def initialize(content:, header:, mode:, path:) def publish connection = Faraday.new(API_BASE_URL) - response = case @mode - when 'create' + response = if create? connection.post(&request_params) - when 'update' + elsif update? connection.patch(&request_params) end @@ -48,9 +47,14 @@ def publish ) end - JSON.parse(response.body) + new_item_id = JSON.parse(response.body)['id'] + update_mapping_file(new_item_id) if new_item_id && create? + + true end + private + # Update a mapping file def update_mapping_file(item_id) raise CannotGetQiitaItemIDError if item_id.nil? || item_id.empty? @@ -61,8 +65,6 @@ def update_mapping_file(item_id) end end - private - def request_params Proc.new do |request| request.url(request_url) @@ -75,7 +77,11 @@ def request_params end def request_url - id = @mode == 'update' ? "/#{item_id}" : nil + id = if create? + nil + elsif update? + "/#{item_id}" + end "#{API_ITEM_ENDPOINT}#{id}" end @@ -90,11 +96,27 @@ def request_body title: @header['title'] }.freeze - body = body.merge(tweet: public?) if @mode == 'create' + body = body.merge(tweet: public?) if create? body.to_json end + def create? + return true if @mode == 'create' + + # Publish as a new article if mapping information is missing but + # ENV['STRICT'] is set to 'false' + return true if @mode == 'update' && item_id.nil? && ENV['STRICT'] == 'false' + + false + end + + def update? + return true if @mode == 'update' && item_id + + false + end + def public? @header['published'] end @@ -117,10 +139,21 @@ def tags # Get a Qiita item ID corresponding to an article path def item_id - # An error handling - raise QiitaItemIDNotFoundError if mappings.grep(/\A^#{Regexp.escape(@path)}/).empty? + if mappings.grep(/\A^#{Regexp.escape(@path)}/).empty? + # If mapping information is missing, and ENV['STRICT'] is set to + # 'true', then raise an error + # + # If mapping information is missing, but ENV['STRICT'] is set to + # 'false', then return nil instead + # + raise QiitaItemIDNotFoundError if ENV['STRICT'] == 'true' + return nil + end + raise QiitaItemIDDuplicationError if mappings.grep(/\A^#{Regexp.escape(@path)}/).length != 1 raise QiitaItemIDNotMatchedError if mappings.grep(/\A^#{Regexp.escape(@path)}/).first.split.length != 2 + + # TODO: Use Validator.item_id if mappings.grep(/\A^#{Regexp.escape(@path)}/).first.split.last.match(/\A[0-9a-f]{20}\z/).nil? raise InvalidQiitaItemIDError end diff --git a/lib/validator.rb b/lib/validator.rb index 05c7b3f..d26c356 100644 --- a/lib/validator.rb +++ b/lib/validator.rb @@ -11,6 +11,11 @@ module Validator def env raise QiitaAccessTokenNotFoundError if ENV['QIITA_ACCESS_TOKEN'].nil? || ENV['QIITA_ACCESS_TOKEN'].empty? raise MappingFilepathNotFoundError if ENV['MAPPING_FILEPATH'].nil? || ENV['MAPPING_FILEPATH'].empty? + raise InvalidStrictError.new(msg: 'The env STRICT is missing.') if ENV['STRICT'].nil? || ENV['STRICT'].empty? + + if ENV['STRICT'] != 'true' && ENV['STRICT'] != 'false' + raise InvalidStrictError.new(msg: 'The env STRICT must be true or false') + end end # Check required header params diff --git a/main.rb b/main.rb index d4f38f0..f49f034 100644 --- a/main.rb +++ b/main.rb @@ -23,8 +23,7 @@ ENV['ADDED_FILES']&.split&.each do |path| article = Article.new(path: path) qiita = Qiita.new(content: article.content, header: YAML.safe_load(article.header), mode: 'create', path: path) - response_body = qiita.publish - qiita.update_mapping_file(response_body['id']) + qiita.publish end ENV['MODIFIED_FILES']&.split&.each do |path| From 6684bea2ce57071d1ed593a15a3a0a006218a0c7 Mon Sep 17 00:00:00 2001 From: noraworld Date: Thu, 17 Mar 2022 13:50:54 +0900 Subject: [PATCH 29/32] Update README * Bump version to v1.0.0 * Add description about strict mode * Add strict option for workflow YAML and .env --- README/en.md | 24 +++++++++++++++++------- README/ja.md | 12 +++++++++++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/README/en.md b/README/en.md index 7768d3f..fc5427f 100644 --- a/README/en.md +++ b/README/en.md @@ -61,10 +61,12 @@ jobs: runs-on: ubuntu-latest steps: - name: "Publish to Qiita" - uses: noraworld/github-to-qiita@v0.2.0 + uses: noraworld/github-to-qiita@v1.0.0 with: dir: "articles" qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} + mapping_filepath: "mapping.txt" + strict: false ``` Replace a part of the above YAML code with the following. @@ -74,11 +76,17 @@ Replace a part of the above YAML code with the following. | `jobs.qiita.steps[*].with.dir` | Specify a directory in which files you want to track and publish to Qiita | true | `articles` | | `jobs.qiita.steps[*].with.qiita_access_token` | Specify your Qiita access token (accessible by `${{ secrets.QIITA_ACCESS_TOKEN }}` [^1]) | true | `${{ secrets.QIITA_ACCESS_TOKEN }}` | | `jobs.qiita.steps[*].with.mapping_filepath` | Specify any file path in which you want to put the mapping file | false | `mapping.txt` | +| `jobs.qiita.steps[*].with.strict` | Specify whether the strict mode is on or off | false | `false` | [^1]: Only in case you set the secret environment variable name as `QIITA_ACCESS_TOKEN` at the previous step. **WARNING:** Please do not set the version to `@main` at the `jobs.qiita.steps[*].uses` section for a production use because the specification is subject to change, and the latest codes potentially contain bugs. It is highly recommended to set the latest tagged version, which can be accessible at the [Tags page](/../../tags). +#### About the strict mode +The strict mode determines whether your article will be published newly or not even if the corresponding article on Qiita is not found and your article file on your repository is MODIFIED (not ADDED). When the strict mode is on (`jobs.qiita.steps[*].with.strict` is set to `true`), your article won’t be published newly if the mapping file is incomplete, the corresponding article on Qiita is not found, and your article file is MODIFIED. Otherwise, your article will be published newly. + +If your mapping information is not fully filled, it is recommended to set `true` because if `false` your article can be going to be published newly even if your articles exist on Qiita. But note that if your new article failed to publish to Qiita for some reason (The Qiita API is down or your article is invalid), your article will never be published as long as you don’t publish manually. Consider setting `jobs.qiita.steps[*].with.strict` to `false` to avoid it. + --- That’s all! @@ -148,14 +156,16 @@ ADDED_FILES="articles/test01.md" MODIFIED_FILES="articles/test02.md" MAPPING_FILEPATH="mapping.txt" QIITA_ACCESS_TOKEN="7f6c7aec310ded84ae3acfe8f920cb1c7556c7d3" # THIS IS A SAMPLE!! +STRICT="true" ``` -| Environment Variable Name | Description | Required | -| ------------------------- | ---------------------------------------------------------- | -------- | -| `ADDED_FILES` | Paths of articles that will be published newly | false | -| `MODIFIED_FILES` | Paths of articles that will be modified | false | -| `MAPPING_FILEPATH` | A filepath to which file it writes the mapping information | true | -| `QIITA_ACCESS_TOKEN` | Your Qiita access token (for development) | true | +| Environment Variable Name | Description | Required | +| ------------------------- | ------------------------------------------------------------------------------------------ | -------- | +| `ADDED_FILES` | Paths of articles that will be published newly | false | +| `MODIFIED_FILES` | Paths of articles that will be modified | false | +| `MAPPING_FILEPATH` | A filepath to which file it writes the mapping information | true | +| `QIITA_ACCESS_TOKEN` | Your Qiita access token (for development) | true | +| `STRICT` | Whether the strict mode is on or off (See [About the strict mode](#about-the-strict-mode)) | true | **NOTE:** It is highly recommended to use the Qiita access token that is different from one for a production use. diff --git a/README/ja.md b/README/ja.md index 3fa89a3..d361abc 100644 --- a/README/ja.md +++ b/README/ja.md @@ -61,10 +61,12 @@ jobs: runs-on: ubuntu-latest steps: - name: "Publish to Qiita" - uses: noraworld/github-to-qiita@v0.2.0 + uses: noraworld/github-to-qiita@v1.0.0 with: dir: "articles" qiita_access_token: ${{ secrets.QIITA_ACCESS_TOKEN }} + mapping_filepath: "mapping.txt" + strict: false ``` 上記の YAML コードの一部を以下の情報に置き換えます。 @@ -74,11 +76,17 @@ jobs: | `jobs.qiita.steps[*].with.dir` | Qiita に投稿したい記事が格納されているディレクトリを指定します | true | `articles` | | `jobs.qiita.steps[*].with.qiita_access_token` | Qiita アクセストークンを指定します (`${{ secrets.QIITA_ACCESS_TOKEN }}` で参照できます [^1]) | true | `${{ secrets.QIITA_ACCESS_TOKEN }}` | | `jobs.qiita.steps[*].with.mapping_filepath` | マッピングファイルのパスを指定します | false | `mapping.txt` | +| `jobs.qiita.steps[*].with.strict` | 厳密チェックモードをオンにするかオフにするかを指定します | false | `false` | [^1]: 一つ前の手順でリポジトリに設定した環境変数名が `QIITA_ACCESS_TOKEN` である場合のみ。 **WARNING:** 最新版のコードはバグを含んでいたり仕様が頻繁に変わったりする可能性があるため、`jobs.qiita.steps[*].uses` でバージョンを `@main` に設定しないでください。最新のタグのバージョンを指定することをおすすめします。タグ一覧は [Tags](/../../tags) からアクセスできます。 +#### 厳密チェックモードについて +厳密チェックモードは Qiita 上に記事が見つからない、かつ、リポジトリ上の記事ファイルが追加ではなく更新された場合に、Qiita に該当記事を投稿するかどうかを指定します。厳密チェックモードがオン (`jobs.qiita.steps[*].with.strict` が `true` に設定されている) の場合、マッピングファイルが不完全なために該当する Qiita の記事が見つからず、記事ファイルが更新された場合には Qiita に投稿されません。厳密チェックモードがオフの場合は Qiita に投稿されます。 + +厳密チェックモードをオフにすると、Qiita に該当記事が存在していても、マッピング情報が不完全であるために、新しい記事として Qiita に投稿されてしまう可能性があります。そのため、マッピング情報が不完全な場合は厳密チェックモードをオンにすることをおすすめします。ただし、新しい記事ファイルをプッシュした際に何らかの理由で Qiita への投稿が失敗した場合に、手動で Qiita に投稿しない限りはその記事が投稿されることがない点にご注意ください。この問題を回避したい場合は `jobs.qiita.steps[*].with.strict` を `false` に設定することをご検討ください。 + --- 設定はこれで以上となります。 @@ -148,6 +156,7 @@ ADDED_FILES="articles/test01.md" MODIFIED_FILES="articles/test02.md" MAPPING_FILEPATH="mapping.txt" QIITA_ACCESS_TOKEN="7f6c7aec310ded84ae3acfe8f920cb1c7556c7d3" # これはサンプル値です!! +STRICT="true" ``` | 環境変数名 | 説明 | 必須かどうか | @@ -156,6 +165,7 @@ QIITA_ACCESS_TOKEN="7f6c7aec310ded84ae3acfe8f920cb1c7556c7d3" # これはサン | `MODIFIED_FILES` | 編集される記事のパス | false | | `MAPPING_FILEPATH` | マッピング情報を格納するファイルのパス | true | | `QIITA_ACCESS_TOKEN` | Qiita アクセストークン (開発用) | true | +| `STRICT` | 厳密チェックモードをオンにするかどうか ([厳密チェックモードについて](#厳密チェックモードについて) を参照) | true | **NOTE:** 本番用とは異なる Qiita アクセストークンを使用することをおすすめします。 From 41069626a6c830732725e23b8b8a81e3280cc7ab Mon Sep 17 00:00:00 2001 From: noraworld Date: Thu, 17 Mar 2022 14:17:17 +0900 Subject: [PATCH 30/32] Update README Add description that string of elements of topics must not include spaces --- README/en.md | 4 ++-- README/ja.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README/en.md b/README/en.md index fc5427f..cd2078f 100644 --- a/README/en.md +++ b/README/en.md @@ -99,7 +99,7 @@ Your Markdown articles need to include a YAML header like this. ```yaml --- title: "Your awesome title" -topics: ["GitHub Actions", "Ruby", "YAML"] +topics: ["GitHubActions", "Ruby", "YAML"] published: true --- @@ -109,7 +109,7 @@ Your article starts here. | Key | Description | Type | Constraint | | ----------- | --------------------------------------------------------------- | -------------------------------------- | ------------ | | `title` | Specify a title of an article | `String` | | -| `topics` | Specify tags of an article that describes its attributes | `Array[String, ]` | Up to 5 tags | +| `topics` | Specify tags of an article that describes its attributes | `Array[String, ]` | • Up to 5 tags
• The string of the elements must not include spaces | | `published` | Specify whether an article will be posted publicly or privately | `Boolean` | | Note that your article file must start with `---`. diff --git a/README/ja.md b/README/ja.md index d361abc..7b4d38a 100644 --- a/README/ja.md +++ b/README/ja.md @@ -99,7 +99,7 @@ jobs: ```yaml --- title: "Your awesome title" -topics: ["GitHub Actions", "Ruby", "YAML"] +topics: ["GitHubActions", "Ruby", "YAML"] published: true --- @@ -109,7 +109,7 @@ Your article starts here. | キー | 説明 | 型 | 制約 | | --- | --- | --- | --- | | `title` | 記事のタイトルを指定します | 文字列 | | -| `topics` | 記事のタグを指定します | 配列[文字列, <文字列, 文字列, ...>] | タグの数は 1 〜 5 個まで | +| `topics` | 記事のタグを指定します | 配列[文字列, <文字列, 文字列, ...>] | • タグの数は 1 〜 5 個まで
• 要素内の文字列にスペースは含めるのは不可 | | `published` | 一般公開するか限定共有にするかを指定します | 真偽値 | | 記事のファイルは `---` から始める必要があります。 From fc179706cb28e9161f28a92006951ac76a79e4cc Mon Sep 17 00:00:00 2001 From: noraworld Date: Sat, 16 Apr 2022 17:48:50 +0900 Subject: [PATCH 31/32] Lock Ruby version to 3.1.1 Bundler fails to install gems because Ruby version is bumped automatically --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index d5a7395..2ae9630 100644 --- a/action.yml +++ b/action.yml @@ -38,7 +38,7 @@ runs: - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: "3.1" + ruby-version: "3.1.1" - name: Install RubyGems run: bundle install --gemfile=$GITHUB_ACTION_PATH/Gemfile From 02bc0362f06598cf1b03fffe43434968a76b2550 Mon Sep 17 00:00:00 2001 From: noraworld Date: Sat, 16 Apr 2022 18:35:47 +0900 Subject: [PATCH 32/32] Update README Turn supported languages block into table --- README/en.md | 1 + README/ja.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README/en.md b/README/en.md index cd2078f..0c87a53 100644 --- a/README/en.md +++ b/README/en.md @@ -1,5 +1,6 @@ # GitHub-to-Qiita | **English** | [日本語](/README/ja.md) | +| ----------- | ---------------------- | GitHub-to-Qiita lets you integrate your Qiita articles with your GitHub repository. Setting up GitHub-to-Qiita and pushing your articles into your GitHub repository, they will be published to [Qiita](https://qiita.com) automatically. diff --git a/README/ja.md b/README/ja.md index 7b4d38a..685be6d 100644 --- a/README/ja.md +++ b/README/ja.md @@ -1,5 +1,6 @@ # GitHub-to-Qiita | [English](/README/en.md) | **日本語** | +| ------------------------ | --------- | GitHub-to-Qiita を使用すると、Qiita の記事を GitHub リポジトリに統合できます。GitHub-to-Qiita を設定し、記事を GitHub リポジトリにプッシュすると、記事は自動的に [Qiita](https://qiita.com) に公開されます。