├── requirements.txt
├── _config.yml
├── assets
└── wordcloud.png
├── lib
└── fonts
│ └── wqy-microhei.ttc
├── word_cloud
├── __pycache__
│ ├── __init__.cpython-310.pyc
│ └── __init__.cpython-38.pyc
└── __init__.py
├── .github
└── workflows
│ └── main.yml
├── main.py
├── README.md
└── LICENSE
/requirements.txt:
--------------------------------------------------------------------------------
1 | PyGithub
2 | wordcloud
3 | matplotlib
4 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-modernist
2 | markdown: GFM
3 |
--------------------------------------------------------------------------------
/assets/wordcloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/johnnian/Blog/HEAD/assets/wordcloud.png
--------------------------------------------------------------------------------
/lib/fonts/wqy-microhei.ttc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/johnnian/Blog/HEAD/lib/fonts/wqy-microhei.ttc
--------------------------------------------------------------------------------
/word_cloud/__pycache__/__init__.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/johnnian/Blog/HEAD/word_cloud/__pycache__/__init__.cpython-310.pyc
--------------------------------------------------------------------------------
/word_cloud/__pycache__/__init__.cpython-38.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/johnnian/Blog/HEAD/word_cloud/__pycache__/__init__.cpython-38.pyc
--------------------------------------------------------------------------------
/word_cloud/__init__.py:
--------------------------------------------------------------------------------
1 | from wordcloud import WordCloud
2 |
3 |
4 | class WordCloudGenerator(object):
5 | def __init__(self, github_repo):
6 | self._repo = github_repo
7 |
8 | def generate(self) -> str:
9 | if self._repo is None:
10 | print('self._repo is None')
11 | return ''
12 |
13 | frequencies = {}
14 |
15 | # get labels
16 | labels = self._repo.get_labels()
17 | print(labels)
18 | for label in labels:
19 | print(label)
20 | issues_in_label = self._repo.get_issues(labels=(label,))
21 | frequencies[label.name] = issues_in_label.totalCount
22 | print(issues_in_label.totalCount)
23 |
24 | print(frequencies)
25 | # generate wordcount image to local dir
26 |
27 | # specify the font to support Chinese word
28 | wc = WordCloud(font_path='lib/fonts/wqy-microhei.ttc', width=1920, height=400)
29 | wc.generate_from_frequencies(frequencies=frequencies)
30 | wc.to_file('assets/wordcloud.png')
31 |
32 | print('wordcloud picture generated successfully!')
33 |
34 | return 'assets/wordcloud.png'
35 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: auto-update-readme-by-issue
2 | on:
3 | issues:
4 | types: [opened, edited, milestoned,deleted,pinned,unpinned,closed,reopened,labeled,unlabeled]
5 |
6 | jobs:
7 | build:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/checkout@master
11 | - name: install dependencies
12 | run: |
13 | pip3 install setuptools --user
14 | pip3 install PyGithub==1.57 --user
15 | pip3 install wordcloud --user
16 | pip3 install matplotlib --user
17 | - name: run python script
18 | env:
19 | GITHUB_TOKEN: ${{ secrets.BLOG_SECRET }}
20 | run: python3 main.py
21 | - name: config git info
22 | env:
23 | USERNAME: ${{ secrets.GIT_USERNAME }}
24 | EMAIL: ${{ secrets.GIT_EMAIL }}
25 | run: |
26 | git config --global user.name $USERNAME
27 | git config --global user.email $EMAIL
28 | - name: commit change
29 | run: |
30 | git checkout master
31 | git add .
32 | git commit -m "Update from Github Action"
33 | - name: push change
34 | env:
35 | USERNAME: ${{ secrets.GIT_USERNAME }}
36 | GITHUB_TOKEN: ${{ secrets.BLOG_SECRET }}
37 | run: |
38 | git push https://$USERNAME:$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY.git
39 | - name: done
40 | run: echo 'done'
41 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python
2 | # -*- coding: utf-8 -*-
3 |
4 | from github import Github
5 | from github.Issue import Issue
6 | from github.Repository import Repository
7 | import os
8 | import time
9 | import codecs
10 | from word_cloud import WordCloudGenerator
11 |
12 | user: Github
13 | user_name: str
14 | blog_repo: Repository
15 | cur_time: str
16 | blog_name: str
17 |
18 |
19 | def login():
20 | global user, user_name, blog_name, blog_repo
21 | github_repo_env = os.environ.get('GITHUB_REPOSITORY')
22 | user_name = github_repo_env[0:github_repo_env.index('/')]
23 | blog_name = github_repo_env[github_repo_env.index('/'):]
24 | password = os.environ.get('GITHUB_TOKEN')
25 | user = Github(user_name, password)
26 | blog_repo = user.get_repo(github_repo_env)
27 | print(blog_repo)
28 |
29 |
30 | def bundle_summary_section():
31 | global blog_repo
32 | global cur_time
33 | global user
34 | global user_name
35 | global blog_name
36 |
37 | summary_section = '''
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | 如果您Fork本仓库,请先阅读:如何基于Github Issues与Github Actions写技术博客?
47 | TIPS:新开设了一个博客,计划输出产品技术系列主题内容,欢迎点击访问
48 |
49 |
50 | '''.format(user_name, blog_name, cur_time)
51 | return summary_section
52 |
53 |
54 | def format_issue(issue: Issue):
55 | return '- %s [%s](%s) \n' % (
56 | issue.created_at.strftime('%Y-%m-%d'),
57 | issue.title,
58 | issue.html_url)
59 |
60 |
61 | def update_readme_md_file(contents):
62 | with codecs.open('README.md', 'w', encoding='utf-8') as f:
63 | f.writelines(contents)
64 | f.flush()
65 | f.close()
66 |
67 |
68 | def bundle_list_by_labels_section():
69 | global blog_repo
70 | global user
71 | global user_name
72 | global blog_name
73 |
74 | # word cloud
75 | wordcloud_image_url = WordCloudGenerator(blog_repo).generate()
76 |
77 | list_by_labels_section = """
78 |
79 |
80 |
81 | """ % (user_name, blog_name,wordcloud_image_url)
82 |
83 | all_labels = blog_repo.get_labels()
84 | for label in all_labels:
85 | temp = ''
86 | count = 0
87 | issues_in_label = blog_repo.get_issues(labels=(label,), state="open")
88 | for issue in issues_in_label:
89 | temp += format_issue(issue)
90 | count += 1
91 | if count > 0:
92 | list_by_labels_section += '''
93 |
94 | %s\t[%s篇]
95 |
96 | %s
97 |
98 |
99 | ''' % (label.name, count, temp)
100 |
101 | return list_by_labels_section
102 |
103 |
104 | def execute():
105 | global cur_time
106 | # common
107 | cur_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
108 |
109 | # 1. login & init rope
110 | login()
111 |
112 | # 2. summary section
113 | summary_section = bundle_summary_section()
114 | print(summary_section)
115 |
116 | # 3. list by labels section
117 | list_by_labels_section = bundle_list_by_labels_section()
118 | print(list_by_labels_section)
119 |
120 | contents = [summary_section, list_by_labels_section]
121 | update_readme_md_file(contents)
122 |
123 | print('README.md updated successfully!!!')
124 |
125 |
126 | if __name__ == '__main__':
127 | execute()
128 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 如果您Fork本仓库,请先阅读:如何基于Github Issues与Github Actions写技术博客?
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | AI [1篇]
20 |
21 | - 2019-09-22 [Keras入门—Hello,World](https://github.com/johnnian/Blog/issues/69)
22 |
23 |
24 |
25 |
26 |
27 | Apps [1篇]
28 |
29 | - 2017-06-29 [iOS开发入门](https://github.com/johnnian/Blog/issues/4)
30 |
31 |
32 |
33 |
34 |
35 | Blog [1篇]
36 |
37 | - 2022-11-10 [如何基于Github Issues与Github Actions写技术博客?](https://github.com/johnnian/Blog/issues/74)
38 |
39 |
40 |
41 |
42 |
43 | Databases [6篇]
44 |
45 | - 2017-08-02 [H2数据库集群搭建(主从结构)](https://github.com/johnnian/Blog/issues/26)
46 | - 2017-07-28 [H2数据库安装与使用(单点)](https://github.com/johnnian/Blog/issues/24)
47 | - 2017-06-30 [生产环境部署Redis Cluster集群](https://github.com/johnnian/Blog/issues/9)
48 | - 2017-06-30 [MongoDB 副本集部署-3.6版本](https://github.com/johnnian/Blog/issues/8)
49 | - 2017-06-29 [Oracle 命令行小结](https://github.com/johnnian/Blog/issues/3)
50 | - 2017-06-29 [Redis安装、配置及使用(单机版)](https://github.com/johnnian/Blog/issues/2)
51 |
52 |
53 |
54 |
55 |
56 | Docker [6篇]
57 |
58 | - 2020-01-28 [ Docker容器—CentOS中文乱码/时区混乱问题](https://github.com/johnnian/Blog/issues/70)
59 | - 2017-10-10 [Docker容器—HBase安装](https://github.com/johnnian/Blog/issues/38)
60 | - 2017-09-05 [Kubernetes—使用Minikube搭建Nginx集群](https://github.com/johnnian/Blog/issues/32)
61 | - 2017-08-23 [Kubernetes—简介以及部署方案](https://github.com/johnnian/Blog/issues/30)
62 | - 2017-07-11 [Docker固定IP设置](https://github.com/johnnian/Blog/issues/16)
63 | - 2017-07-05 [Docker容器启动后自运行脚本的配置](https://github.com/johnnian/Blog/issues/13)
64 |
65 |
66 |
67 |
68 |
69 | Guitar [1篇]
70 |
71 | - 2018-07-07 [乐理知识系列之和弦](https://github.com/johnnian/Blog/issues/54)
72 |
73 |
74 |
75 |
76 |
77 | Java Web [11篇]
78 |
79 | - 2019-03-28 [Springboot系列之—war包部署&配置文件分离](https://github.com/johnnian/Blog/issues/59)
80 | - 2019-03-28 [Springboot系列之—动态配置logback路径](https://github.com/johnnian/Blog/issues/58)
81 | - 2018-04-11 [BMP图片详解](https://github.com/johnnian/Blog/issues/51)
82 | - 2018-02-28 [SpringBoot系列之—Apache Shiro整合](https://github.com/johnnian/Blog/issues/50)
83 | - 2017-11-18 [SpringBoot系列之—日志打印的问题(经验总结)](https://github.com/johnnian/Blog/issues/42)
84 | - 2017-11-12 [SpringBoot系列之—瘦身部署](https://github.com/johnnian/Blog/issues/41)
85 | - 2017-11-04 [SpringBoot系列之—Web开发实战](https://github.com/johnnian/Blog/issues/39)
86 | - 2017-09-30 [Java基础—线程安全与锁](https://github.com/johnnian/Blog/issues/37)
87 | - 2017-09-29 [Java基础—NIO基础概念](https://github.com/johnnian/Blog/issues/36)
88 | - 2017-07-03 [Gson转换JSON的坑](https://github.com/johnnian/Blog/issues/11)
89 | - 2017-07-03 [Tomcat安全加固](https://github.com/johnnian/Blog/issues/10)
90 |
91 |
92 |
93 |
94 |
95 | keras [1篇]
96 |
97 | - 2019-09-22 [Keras入门—Hello,World](https://github.com/johnnian/Blog/issues/69)
98 |
99 |
100 |
101 |
102 |
103 | Linux [13篇]
104 |
105 | - 2024-07-13 [解决 curl: Protocol "https" not supported or disabled in libcurl ](https://github.com/johnnian/Blog/issues/77)
106 | - 2018-11-20 [ Redhat 6 :This system is not registered to Red Hat Subscription Management](https://github.com/johnnian/Blog/issues/56)
107 | - 2018-11-16 [Connector/Python安装—使用Python连接MySQL](https://github.com/johnnian/Blog/issues/55)
108 | - 2018-05-14 [CentOS 7 安装JDK](https://github.com/johnnian/Blog/issues/53)
109 | - 2018-02-12 [CentOS 7 搭建局域网VPN-Shadowsocks](https://github.com/johnnian/Blog/issues/48)
110 | - 2018-02-09 [CentOS 7 更改网卡名](https://github.com/johnnian/Blog/issues/47)
111 | - 2018-01-25 [ SSH使用问题以及解决方案(expecting SSH2_MSG_KEX_ECDH_REPLY)](https://github.com/johnnian/Blog/issues/44)
112 | - 2018-01-11 [autossh内外网穿透方法](https://github.com/johnnian/Blog/issues/43)
113 | - 2017-09-25 [Linux Socket Exception](https://github.com/johnnian/Blog/issues/35)
114 | - 2017-09-07 [CentOS 安装 Ruby 2.3.0](https://github.com/johnnian/Blog/issues/33)
115 | - 2017-08-10 [Supervisor 安装使用](https://github.com/johnnian/Blog/issues/27)
116 | - 2017-07-13 [CentOS 6 配置:Keepalived + Nginx](https://github.com/johnnian/Blog/issues/19)
117 | - 2017-07-05 [CentOS开机启动脚本](https://github.com/johnnian/Blog/issues/15)
118 |
119 |
120 |
121 |
122 |
123 | MongoDB [1篇]
124 |
125 | - 2017-06-30 [MongoDB 副本集部署-3.6版本](https://github.com/johnnian/Blog/issues/8)
126 |
127 |
128 |
129 |
130 |
131 | MySQL [1篇]
132 |
133 | - 2018-11-16 [Connector/Python安装—使用Python连接MySQL](https://github.com/johnnian/Blog/issues/55)
134 |
135 |
136 |
137 |
138 |
139 | Python [4篇]
140 |
141 | - 2024-07-12 [Python3 Requests依赖报错-ImportError: urllib3 v2.0 only suports Openssl 1.1.1+](https://github.com/johnnian/Blog/issues/76)
142 | - 2019-04-28 [Python系列之—Web脚手架(flask+gunicorn+守护进程)](https://github.com/johnnian/Blog/issues/63)
143 | - 2019-04-01 [开发工具系列之—pyenv:python版本切换](https://github.com/johnnian/Blog/issues/61)
144 | - 2018-11-16 [Connector/Python安装—使用Python连接MySQL](https://github.com/johnnian/Blog/issues/55)
145 |
146 |
147 |
148 |
149 |
150 | RabbitMQ [1篇]
151 |
152 | - 2017-06-29 [CentOS6.8 安装 RebbitMQ](https://github.com/johnnian/Blog/issues/7)
153 |
154 |
155 |
156 |
157 |
158 | Redis [1篇]
159 |
160 | - 2017-06-30 [生产环境部署Redis Cluster集群](https://github.com/johnnian/Blog/issues/9)
161 |
162 |
163 |
164 |
165 |
166 | SpringBoot [3篇]
167 |
168 | - 2017-11-18 [SpringBoot系列之—日志打印的问题(经验总结)](https://github.com/johnnian/Blog/issues/42)
169 | - 2017-11-12 [SpringBoot系列之—瘦身部署](https://github.com/johnnian/Blog/issues/41)
170 | - 2017-11-04 [SpringBoot系列之—Web开发实战](https://github.com/johnnian/Blog/issues/39)
171 |
172 |
173 |
174 |
175 |
176 | Storm [3篇]
177 |
178 | - 2017-07-27 [Storm实战—任务部署与调度](https://github.com/johnnian/Blog/issues/23)
179 | - 2017-07-26 [Storm实战—安装部署](https://github.com/johnnian/Blog/issues/22)
180 | - 2017-07-25 [Storm实战—基本概念](https://github.com/johnnian/Blog/issues/21)
181 |
182 |
183 |
184 |
185 |
186 | Tools [17篇]
187 |
188 | - 2023-02-04 [【工具】快速方便下载Youtube的方法](https://github.com/johnnian/Blog/issues/75)
189 | - 2019-07-23 [开发工具系列之—GoAcess:Nginx日志分析利器](https://github.com/johnnian/Blog/issues/68)
190 | - 2019-04-01 [开发工具系列之—pyenv:python版本切换](https://github.com/johnnian/Blog/issues/61)
191 | - 2019-03-28 [开发工具系列之— Macos下homebrew更新慢问题的解决](https://github.com/johnnian/Blog/issues/60)
192 | - 2018-02-27 [CentOS 7 安装Gitbook](https://github.com/johnnian/Blog/issues/49)
193 | - 2018-02-12 [CentOS 7 搭建局域网VPN-Shadowsocks](https://github.com/johnnian/Blog/issues/48)
194 | - 2018-02-09 [日志服务—阿里云日志服务使用记录](https://github.com/johnnian/Blog/issues/46)
195 | - 2018-01-25 [ SSH使用问题以及解决方案(expecting SSH2_MSG_KEX_ECDH_REPLY)](https://github.com/johnnian/Blog/issues/44)
196 | - 2017-09-08 [日志服务—使用Flume-NG/Kafaka搭建日志搜集服务](https://github.com/johnnian/Blog/issues/34)
197 | - 2017-09-07 [CentOS 安装 Ruby 2.3.0](https://github.com/johnnian/Blog/issues/33)
198 | - 2017-08-22 [研发工具清单(持续更新)](https://github.com/johnnian/Blog/issues/29)
199 | - 2017-08-10 [Supervisor 安装使用](https://github.com/johnnian/Blog/issues/27)
200 | - 2017-07-31 [Zookeeper安装部署(单点/集群)](https://github.com/johnnian/Blog/issues/25)
201 | - 2017-07-13 [CentOS 6 配置:Keepalived + Nginx](https://github.com/johnnian/Blog/issues/19)
202 | - 2017-07-03 [Tomcat安全加固](https://github.com/johnnian/Blog/issues/10)
203 | - 2017-06-29 [Nginx配置多个HTTPS域名](https://github.com/johnnian/Blog/issues/6)
204 | - 2017-06-29 [Git 常用命令速查表](https://github.com/johnnian/Blog/issues/5)
205 |
206 |
207 |
208 |
209 |
210 | 区块链 [1篇]
211 |
212 | - 2020-10-19 [区块链学习—Hyberledger Fabric 网络搭建入门](https://github.com/johnnian/Blog/issues/71)
213 |
214 |
215 |
216 |
217 |
218 | 大数据 [4篇]
219 |
220 | - 2017-10-10 [Docker容器—HBase安装](https://github.com/johnnian/Blog/issues/38)
221 | - 2017-07-27 [Storm实战—任务部署与调度](https://github.com/johnnian/Blog/issues/23)
222 | - 2017-07-26 [Storm实战—安装部署](https://github.com/johnnian/Blog/issues/22)
223 | - 2017-07-25 [Storm实战—基本概念](https://github.com/johnnian/Blog/issues/21)
224 |
225 |
226 |
227 |
228 |
229 | 机器学习 [1篇]
230 |
231 | - 2019-06-04 [机器学习算法系列—介绍](https://github.com/johnnian/Blog/issues/65)
232 |
233 |
234 |
235 |
236 |
237 | 读书笔记 [1篇]
238 |
239 | - 2017-07-13 [《微服务文集 (ThoughtWorks洞见)》](https://github.com/johnnian/Blog/issues/18)
240 |
241 |
242 |
243 |
244 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Mozilla Public License Version 2.0
2 | ==================================
3 |
4 | 1. Definitions
5 | --------------
6 |
7 | 1.1. "Contributor"
8 | means each individual or legal entity that creates, contributes to
9 | the creation of, or owns Covered Software.
10 |
11 | 1.2. "Contributor Version"
12 | means the combination of the Contributions of others (if any) used
13 | by a Contributor and that particular Contributor's Contribution.
14 |
15 | 1.3. "Contribution"
16 | means Covered Software of a particular Contributor.
17 |
18 | 1.4. "Covered Software"
19 | means Source Code Form to which the initial Contributor has attached
20 | the notice in Exhibit A, the Executable Form of such Source Code
21 | Form, and Modifications of such Source Code Form, in each case
22 | including portions thereof.
23 |
24 | 1.5. "Incompatible With Secondary Licenses"
25 | means
26 |
27 | (a) that the initial Contributor has attached the notice described
28 | in Exhibit B to the Covered Software; or
29 |
30 | (b) that the Covered Software was made available under the terms of
31 | version 1.1 or earlier of the License, but not also under the
32 | terms of a Secondary License.
33 |
34 | 1.6. "Executable Form"
35 | means any form of the work other than Source Code Form.
36 |
37 | 1.7. "Larger Work"
38 | means a work that combines Covered Software with other material, in
39 | a separate file or files, that is not Covered Software.
40 |
41 | 1.8. "License"
42 | means this document.
43 |
44 | 1.9. "Licensable"
45 | means having the right to grant, to the maximum extent possible,
46 | whether at the time of the initial grant or subsequently, any and
47 | all of the rights conveyed by this License.
48 |
49 | 1.10. "Modifications"
50 | means any of the following:
51 |
52 | (a) any file in Source Code Form that results from an addition to,
53 | deletion from, or modification of the contents of Covered
54 | Software; or
55 |
56 | (b) any new file in Source Code Form that contains any Covered
57 | Software.
58 |
59 | 1.11. "Patent Claims" of a Contributor
60 | means any patent claim(s), including without limitation, method,
61 | process, and apparatus claims, in any patent Licensable by such
62 | Contributor that would be infringed, but for the grant of the
63 | License, by the making, using, selling, offering for sale, having
64 | made, import, or transfer of either its Contributions or its
65 | Contributor Version.
66 |
67 | 1.12. "Secondary License"
68 | means either the GNU General Public License, Version 2.0, the GNU
69 | Lesser General Public License, Version 2.1, the GNU Affero General
70 | Public License, Version 3.0, or any later versions of those
71 | licenses.
72 |
73 | 1.13. "Source Code Form"
74 | means the form of the work preferred for making modifications.
75 |
76 | 1.14. "You" (or "Your")
77 | means an individual or a legal entity exercising rights under this
78 | License. For legal entities, "You" includes any entity that
79 | controls, is controlled by, or is under common control with You. For
80 | purposes of this definition, "control" means (a) the power, direct
81 | or indirect, to cause the direction or management of such entity,
82 | whether by contract or otherwise, or (b) ownership of more than
83 | fifty percent (50%) of the outstanding shares or beneficial
84 | ownership of such entity.
85 |
86 | 2. License Grants and Conditions
87 | --------------------------------
88 |
89 | 2.1. Grants
90 |
91 | Each Contributor hereby grants You a world-wide, royalty-free,
92 | non-exclusive license:
93 |
94 | (a) under intellectual property rights (other than patent or trademark)
95 | Licensable by such Contributor to use, reproduce, make available,
96 | modify, display, perform, distribute, and otherwise exploit its
97 | Contributions, either on an unmodified basis, with Modifications, or
98 | as part of a Larger Work; and
99 |
100 | (b) under Patent Claims of such Contributor to make, use, sell, offer
101 | for sale, have made, import, and otherwise transfer either its
102 | Contributions or its Contributor Version.
103 |
104 | 2.2. Effective Date
105 |
106 | The licenses granted in Section 2.1 with respect to any Contribution
107 | become effective for each Contribution on the date the Contributor first
108 | distributes such Contribution.
109 |
110 | 2.3. Limitations on Grant Scope
111 |
112 | The licenses granted in this Section 2 are the only rights granted under
113 | this License. No additional rights or licenses will be implied from the
114 | distribution or licensing of Covered Software under this License.
115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a
116 | Contributor:
117 |
118 | (a) for any code that a Contributor has removed from Covered Software;
119 | or
120 |
121 | (b) for infringements caused by: (i) Your and any other third party's
122 | modifications of Covered Software, or (ii) the combination of its
123 | Contributions with other software (except as part of its Contributor
124 | Version); or
125 |
126 | (c) under Patent Claims infringed by Covered Software in the absence of
127 | its Contributions.
128 |
129 | This License does not grant any rights in the trademarks, service marks,
130 | or logos of any Contributor (except as may be necessary to comply with
131 | the notice requirements in Section 3.4).
132 |
133 | 2.4. Subsequent Licenses
134 |
135 | No Contributor makes additional grants as a result of Your choice to
136 | distribute the Covered Software under a subsequent version of this
137 | License (see Section 10.2) or under the terms of a Secondary License (if
138 | permitted under the terms of Section 3.3).
139 |
140 | 2.5. Representation
141 |
142 | Each Contributor represents that the Contributor believes its
143 | Contributions are its original creation(s) or it has sufficient rights
144 | to grant the rights to its Contributions conveyed by this License.
145 |
146 | 2.6. Fair Use
147 |
148 | This License is not intended to limit any rights You have under
149 | applicable copyright doctrines of fair use, fair dealing, or other
150 | equivalents.
151 |
152 | 2.7. Conditions
153 |
154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
155 | in Section 2.1.
156 |
157 | 3. Responsibilities
158 | -------------------
159 |
160 | 3.1. Distribution of Source Form
161 |
162 | All distribution of Covered Software in Source Code Form, including any
163 | Modifications that You create or to which You contribute, must be under
164 | the terms of this License. You must inform recipients that the Source
165 | Code Form of the Covered Software is governed by the terms of this
166 | License, and how they can obtain a copy of this License. You may not
167 | attempt to alter or restrict the recipients' rights in the Source Code
168 | Form.
169 |
170 | 3.2. Distribution of Executable Form
171 |
172 | If You distribute Covered Software in Executable Form then:
173 |
174 | (a) such Covered Software must also be made available in Source Code
175 | Form, as described in Section 3.1, and You must inform recipients of
176 | the Executable Form how they can obtain a copy of such Source Code
177 | Form by reasonable means in a timely manner, at a charge no more
178 | than the cost of distribution to the recipient; and
179 |
180 | (b) You may distribute such Executable Form under the terms of this
181 | License, or sublicense it under different terms, provided that the
182 | license for the Executable Form does not attempt to limit or alter
183 | the recipients' rights in the Source Code Form under this License.
184 |
185 | 3.3. Distribution of a Larger Work
186 |
187 | You may create and distribute a Larger Work under terms of Your choice,
188 | provided that You also comply with the requirements of this License for
189 | the Covered Software. If the Larger Work is a combination of Covered
190 | Software with a work governed by one or more Secondary Licenses, and the
191 | Covered Software is not Incompatible With Secondary Licenses, this
192 | License permits You to additionally distribute such Covered Software
193 | under the terms of such Secondary License(s), so that the recipient of
194 | the Larger Work may, at their option, further distribute the Covered
195 | Software under the terms of either this License or such Secondary
196 | License(s).
197 |
198 | 3.4. Notices
199 |
200 | You may not remove or alter the substance of any license notices
201 | (including copyright notices, patent notices, disclaimers of warranty,
202 | or limitations of liability) contained within the Source Code Form of
203 | the Covered Software, except that You may alter any license notices to
204 | the extent required to remedy known factual inaccuracies.
205 |
206 | 3.5. Application of Additional Terms
207 |
208 | You may choose to offer, and to charge a fee for, warranty, support,
209 | indemnity or liability obligations to one or more recipients of Covered
210 | Software. However, You may do so only on Your own behalf, and not on
211 | behalf of any Contributor. You must make it absolutely clear that any
212 | such warranty, support, indemnity, or liability obligation is offered by
213 | You alone, and You hereby agree to indemnify every Contributor for any
214 | liability incurred by such Contributor as a result of warranty, support,
215 | indemnity or liability terms You offer. You may include additional
216 | disclaimers of warranty and limitations of liability specific to any
217 | jurisdiction.
218 |
219 | 4. Inability to Comply Due to Statute or Regulation
220 | ---------------------------------------------------
221 |
222 | If it is impossible for You to comply with any of the terms of this
223 | License with respect to some or all of the Covered Software due to
224 | statute, judicial order, or regulation then You must: (a) comply with
225 | the terms of this License to the maximum extent possible; and (b)
226 | describe the limitations and the code they affect. Such description must
227 | be placed in a text file included with all distributions of the Covered
228 | Software under this License. Except to the extent prohibited by statute
229 | or regulation, such description must be sufficiently detailed for a
230 | recipient of ordinary skill to be able to understand it.
231 |
232 | 5. Termination
233 | --------------
234 |
235 | 5.1. The rights granted under this License will terminate automatically
236 | if You fail to comply with any of its terms. However, if You become
237 | compliant, then the rights granted under this License from a particular
238 | Contributor are reinstated (a) provisionally, unless and until such
239 | Contributor explicitly and finally terminates Your grants, and (b) on an
240 | ongoing basis, if such Contributor fails to notify You of the
241 | non-compliance by some reasonable means prior to 60 days after You have
242 | come back into compliance. Moreover, Your grants from a particular
243 | Contributor are reinstated on an ongoing basis if such Contributor
244 | notifies You of the non-compliance by some reasonable means, this is the
245 | first time You have received notice of non-compliance with this License
246 | from such Contributor, and You become compliant prior to 30 days after
247 | Your receipt of the notice.
248 |
249 | 5.2. If You initiate litigation against any entity by asserting a patent
250 | infringement claim (excluding declaratory judgment actions,
251 | counter-claims, and cross-claims) alleging that a Contributor Version
252 | directly or indirectly infringes any patent, then the rights granted to
253 | You by any and all Contributors for the Covered Software under Section
254 | 2.1 of this License shall terminate.
255 |
256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all
257 | end user license agreements (excluding distributors and resellers) which
258 | have been validly granted by You or Your distributors under this License
259 | prior to termination shall survive termination.
260 |
261 | ************************************************************************
262 | * *
263 | * 6. Disclaimer of Warranty *
264 | * ------------------------- *
265 | * *
266 | * Covered Software is provided under this License on an "as is" *
267 | * basis, without warranty of any kind, either expressed, implied, or *
268 | * statutory, including, without limitation, warranties that the *
269 | * Covered Software is free of defects, merchantable, fit for a *
270 | * particular purpose or non-infringing. The entire risk as to the *
271 | * quality and performance of the Covered Software is with You. *
272 | * Should any Covered Software prove defective in any respect, You *
273 | * (not any Contributor) assume the cost of any necessary servicing, *
274 | * repair, or correction. This disclaimer of warranty constitutes an *
275 | * essential part of this License. No use of any Covered Software is *
276 | * authorized under this License except under this disclaimer. *
277 | * *
278 | ************************************************************************
279 |
280 | ************************************************************************
281 | * *
282 | * 7. Limitation of Liability *
283 | * -------------------------- *
284 | * *
285 | * Under no circumstances and under no legal theory, whether tort *
286 | * (including negligence), contract, or otherwise, shall any *
287 | * Contributor, or anyone who distributes Covered Software as *
288 | * permitted above, be liable to You for any direct, indirect, *
289 | * special, incidental, or consequential damages of any character *
290 | * including, without limitation, damages for lost profits, loss of *
291 | * goodwill, work stoppage, computer failure or malfunction, or any *
292 | * and all other commercial damages or losses, even if such party *
293 | * shall have been informed of the possibility of such damages. This *
294 | * limitation of liability shall not apply to liability for death or *
295 | * personal injury resulting from such party's negligence to the *
296 | * extent applicable law prohibits such limitation. Some *
297 | * jurisdictions do not allow the exclusion or limitation of *
298 | * incidental or consequential damages, so this exclusion and *
299 | * limitation may not apply to You. *
300 | * *
301 | ************************************************************************
302 |
303 | 8. Litigation
304 | -------------
305 |
306 | Any litigation relating to this License may be brought only in the
307 | courts of a jurisdiction where the defendant maintains its principal
308 | place of business and such litigation shall be governed by laws of that
309 | jurisdiction, without reference to its conflict-of-law provisions.
310 | Nothing in this Section shall prevent a party's ability to bring
311 | cross-claims or counter-claims.
312 |
313 | 9. Miscellaneous
314 | ----------------
315 |
316 | This License represents the complete agreement concerning the subject
317 | matter hereof. If any provision of this License is held to be
318 | unenforceable, such provision shall be reformed only to the extent
319 | necessary to make it enforceable. Any law or regulation which provides
320 | that the language of a contract shall be construed against the drafter
321 | shall not be used to construe this License against a Contributor.
322 |
323 | 10. Versions of the License
324 | ---------------------------
325 |
326 | 10.1. New Versions
327 |
328 | Mozilla Foundation is the license steward. Except as provided in Section
329 | 10.3, no one other than the license steward has the right to modify or
330 | publish new versions of this License. Each version will be given a
331 | distinguishing version number.
332 |
333 | 10.2. Effect of New Versions
334 |
335 | You may distribute the Covered Software under the terms of the version
336 | of the License under which You originally received the Covered Software,
337 | or under the terms of any subsequent version published by the license
338 | steward.
339 |
340 | 10.3. Modified Versions
341 |
342 | If you create software not governed by this License, and you want to
343 | create a new license for such software, you may create and use a
344 | modified version of this License if you rename the license and remove
345 | any references to the name of the license steward (except to note that
346 | such modified license differs from this License).
347 |
348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary
349 | Licenses
350 |
351 | If You choose to distribute Source Code Form that is Incompatible With
352 | Secondary Licenses under the terms of this version of the License, the
353 | notice described in Exhibit B of this License must be attached.
354 |
355 | Exhibit A - Source Code Form License Notice
356 | -------------------------------------------
357 |
358 | This Source Code Form is subject to the terms of the Mozilla Public
359 | License, v. 2.0. If a copy of the MPL was not distributed with this
360 | file, You can obtain one at http://mozilla.org/MPL/2.0/.
361 |
362 | If it is not possible or desirable to put the notice in a particular
363 | file, then You may include the notice in a location (such as a LICENSE
364 | file in a relevant directory) where a recipient would be likely to look
365 | for such a notice.
366 |
367 | You may add additional accurate notices of copyright ownership.
368 |
369 | Exhibit B - "Incompatible With Secondary Licenses" Notice
370 | ---------------------------------------------------------
371 |
372 | This Source Code Form is "Incompatible With Secondary Licenses", as
373 | defined by the Mozilla Public License, v. 2.0.
374 |
--------------------------------------------------------------------------------