pidgin/nest

Merge

2019-06-09, John Bailey
a96410199170
Merge
--- a/Dockerfile Wed Jun 05 00:19:04 2019 -0400
+++ b/Dockerfile Sun Jun 09 14:01:46 2019 -0400
@@ -8,6 +8,8 @@
apt-get install -y hugo && \
apt-get clean && \
rm -rf /var/lib/apt/lists
+ARG BUILD_DATE=unknown
+ARG COMMIT=unknown
COPY hugo /nest/hugo
RUN hugo -s /nest/hugo -d /nest/public
--- a/convey.yml Wed Jun 05 00:19:04 2019 -0400
+++ b/convey.yml Sun Jun 09 14:01:46 2019 -0400
@@ -13,7 +13,13 @@
type: docker/build
dockerfile: Dockerfile
tag: ${REGISTRY}/${REPO}:${TAG}
+ labels:
+ - BUILD_DATE=${RUN_TIME}
+ - COMMIT=${HG_COMMIT}
files: .
+ arguments:
+ - BUILD_DATE=${RUN_TIME}
+ - COMMIT=${HG_COMMIT}
push:
type: docker/push
image: ${REGISTRY}/${REPO}:${TAG}
--- a/hugo/content/_index.es.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/_index.es.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,5 +1,7 @@
---
-title: "About"
+title: About
+date: 2019-01-15T05:58:46.000Z
+lastmod: 2019-01-21T22:34:09.000Z
---
{{< download-now >}}
--- a/hugo/content/building/2.x.y.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/building/2.x.y.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,7 +1,8 @@
---
-title: "2.x.y"
-data: 2019-02-03T19:15:00-05:00
-anchor: "2.x.y"
+title: 2.x.y
+date: 2019-01-11T03:13:47.000Z
+anchor: 2.x.y
+lastmod: 2019-02-04T00:21:57.000Z
---
# Building
--- a/hugo/content/building/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/building/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,7 +1,8 @@
---
-title: "Building"
-date: 2019-01-10T22:12:03-06:00
-anchor: "building"
+title: Building
+date: 2019-01-11T05:44:25.000Z
+anchor: building
weight: -100
+lastmod: 2019-01-21T22:34:09.000Z
---
--- a/hugo/content/contributing/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/contributing/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,10 @@
---
-title: "Contributing"
-date: 2019-02-03T19:49:30-05:00
-anchor: "contributing"
+title: Contributing
+date: 2017-09-19T02:00:55.000Z
+anchor: contributing
weight: 10
original: true
+lastmod: 2019-03-17T23:05:38.000Z
---
Pidgin is a huge project with a ton of things to be done, even if you're not a coder. Below is a short list of things you can do to help get involved!!
--- a/hugo/content/contributing/mercurial.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/contributing/mercurial.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
---
-title: "Using Mercurial"
-date: 2019-02-01T03:51:53+00:00
-anchor: "contributing"
-replaces: [
- "developer.pidgin.im/wiki/UsingPidginMercurial",
-]
+title: Using Mercurial
+date: 2019-02-01T05:09:48.000Z
+anchor: contributing
+replaces:
+ - developer.pidgin.im/wiki/UsingPidginMercurial
+lastmod: 2019-02-01T05:09:48.000Z
---
### Configure Mercurial
--- a/hugo/content/development/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/development/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,6 +1,8 @@
---
-title: "Development"
-date: 2019-01-11T04:05:09+00:00
-anchor: "development"
+title: Development
+date: 2019-01-15T03:38:25.000Z
+anchor: development
weight: 10
+lastmod: 2019-01-21T22:34:09.000Z
---
+
--- a/hugo/content/development/design-guidelines.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/development/design-guidelines.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
---
-title: "Design Guidelines"
-date: 2019-02-03T20:47:20-05:00
-anchor: "design-guidelines"
-replaces: [
- "developer.pidgin.im/wiki/DesignGuidelines",
-]
+title: Design Guidelines
+date: 2017-09-19T03:27:00.000Z
+anchor: design-guidelines
+replaces:
+ - developer.pidgin.im/wiki/DesignGuidelines
+lastmod: 2019-03-17T23:05:38.000Z
---
## Applicability
--- a/hugo/content/development/faq.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/development/faq.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
---
-title: "FAQ"
-date: 2019-02-03T20:57:00-05:00
-anchor: "development-faq"
-replaces: [
- "developer.pidgin.im/wiki/Development%20FAQ",
-]
+title: FAQ
+date: 2017-09-19T03:57:30.000Z
+anchor: development-faq
+replaces:
+ - developer.pidgin.im/wiki/Development%20FAQ
+lastmod: 2019-03-17T23:05:38.000Z
---
The following is a list of Frequently Asked Questions (FAQs), with answers, and notes related to development using LibPurple.
--- a/hugo/content/development/version-control.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/development/version-control.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
---
-title: "Version Control"
-date: 2019-02-03T21:08:00-05:00
-anchor: "development"
-replaces: [
- "developer.pidgin.im/wiki/UsingPidginMercurial",
-]
+title: Version Control
+date: 2019-02-01T05:09:48.000Z
+anchor: development
+replaces:
+ - developer.pidgin.im/wiki/UsingPidginMercurial
+lastmod: 2019-02-04T02:09:43.000Z
---
All of the source code relating to Pidgin and its libraries is hosted on
--- a/hugo/content/drafts/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,6 +1,8 @@
---
-title: "Drafts"
+title: Drafts
+date: 2019-01-14T18:49:58.000Z
draft: true
+lastmod: 2019-01-21T22:34:09.000Z
---
**THIS PAGE SHOULD NOT BE IN PRODUCTION**
\ No newline at end of file
--- a/hugo/content/drafts/download.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/download.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,18 +1,20 @@
---
-title: "Download"
-date: 2019-01-16T05:42:50Z
+title: Download
+date: 2019-01-16T20:14:59.000Z
draft: true
-replaces: [
- "pidgin.im/download/",
- "pidgin.im/download/windows/",
- "pidgin.im/download/linux/",
- "pidgin.im/download/mac/",
- "pidgin.im/download/source/",
-]
+replaces:
+ - pidgin.im/download/
+ - pidgin.im/download/windows/
+ - pidgin.im/download/linux/
+ - pidgin.im/download/mac/
+ - pidgin.im/download/source/
+lastmod: 2019-05-29T22:53:40.000Z
---
<!-- Never pipe curl sudo bash -->
+# Pidign
+
## Windows
[![](/images/download.png)](http://sourceforge.net/projects/pidgin/files/Pidgin/2.13.0/pidgin-2.13.0.exe/download?accel_key=62%3Aa4c0d8b6-1952-11e9-abae-525400fc71c5&click_id=a4c154bc-1952-11e9-abae-525400fc71c5&source=accel)
@@ -34,6 +36,12 @@
sudo apt-get install pidgin
```
+## BSD
+
+```
+pkg install pidgin
+```
+
## macOS
For a native Mac OS X experience we recommend [Adium](http://adium.im/), which uses libpurple (the core of Pidgin) for much of its protocol support.
@@ -51,3 +59,24 @@
If you want to **use** Pidgin, you should either download and use our Windows installer or look for pre-built packages from your operating system distribution.
If you are looking to **modify** Pidgin, you may want to look at our [instructions for checking out the code from our repository](https://developer.pidgin.im/wiki/UsingPidginMercurial).
+
+# Finch
+
+## Linux
+
+We do not provide pre-built packages for Linux and Unix distributions. We recommend installing Pidgin using your operating system's standard package management tool.
+
+If your operating system doesn't provide a pre-built package, or if their pre-built package is out of date and you want to upgrade, then you can try [building from source](#Source).
+
+### Debian/Ubuntu
+
+```bash
+sudo apt-get update
+sudo apt-get install finch
+```
+
+## BSD
+
+```
+pkg install finch
+```
\ No newline at end of file
--- a/hugo/content/drafts/release-process.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/release-process.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,10 @@
---
-title: "Release Process"
+title: Release Process
+date: 2019-01-14T18:49:58.000Z
draft: true
-replaces: [
- "developer.pidgin.im/wiki/ReleaseProcess",
-]
+replaces:
+ - developer.pidgin.im/wiki/ReleaseProcess
+lastmod: 2019-03-17T23:05:38.000Z
---
The release process for Pidgin is kind of tedious but is described in great detail below.
--- a/hugo/content/drafts/voice-and-video-API.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/voice-and-video-API.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,9 @@
---
-title: "Voice and Video API"
-date: 2019-03-16T20:15:02Z
-replaces: [
- "developer.pidgin.im/wiki/vvAPI",
-]
+title: Voice and Video API
+date: 2019-03-17T23:11:17.000Z
+replaces:
+ - developer.pidgin.im/wiki/vvAPI
+lastmod: 2019-03-17T23:11:17.000Z
---
For functions that could be per conference, session, participant, or stream, they would have a session and a participant parameter. A NULL for either of these would be a wildcard.
--- a/hugo/content/drafts/voice-and-video.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/voice-and-video.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,9 @@
---
-title: "Voice and Video"
-date: 2019-03-16T16:58:31Z
-replaces: [
- "developer.pidgin.im/wiki/vv",
-]
+title: Voice and Video
+date: 2019-03-17T23:11:17.000Z
+replaces:
+ - developer.pidgin.im/wiki/vv
+lastmod: 2019-03-17T23:11:17.000Z
---
## Voice and Video
--- a/hugo/content/gsoc/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/gsoc/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,17 +1,17 @@
---
-title: "Google Summer of Code"
-date: 2019-01-10T22:32:00-06:00
-anchor: "gsoc"
-replaces: [
- "developer.pidgin.im/wiki/SummerOfCode2007",
- "developer.pidgin.im/wiki/SummerOfCode2008",
- "developer.pidgin.im/wiki/SummerOfCode2009",
- "developer.pidgin.im/wiki/SummerOfCode2010",
- "developer.pidgin.im/wiki/SummerOfCode2011",
- "developer.pidgin.im/wiki/SummerOfCode2012",
- "developer.pidgin.im/wiki/SummerOfCode2013",
- "developer.pidgin.im/wiki/SummerOfCode2015",
-]
+title: Google Summer of Code
+date: 2019-01-15T03:38:25.000Z
+anchor: gsoc
+replaces:
+ - developer.pidgin.im/wiki/SummerOfCode2007
+ - developer.pidgin.im/wiki/SummerOfCode2008
+ - developer.pidgin.im/wiki/SummerOfCode2009
+ - developer.pidgin.im/wiki/SummerOfCode2010
+ - developer.pidgin.im/wiki/SummerOfCode2011
+ - developer.pidgin.im/wiki/SummerOfCode2012
+ - developer.pidgin.im/wiki/SummerOfCode2013
+ - developer.pidgin.im/wiki/SummerOfCode2015
+lastmod: 2019-01-21T22:34:09.000Z
---
Pidgin has been involved in the
--- a/hugo/content/gsoc/ideas.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/gsoc/ideas.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
---
-title: "GSoC Ideas"
-date: 2019-01-10T22:32:00-06:00
-anchor: "gsoc-ideas"
-replaces: [
- "https://developer.pidgin.im/wiki/SoCIdeas",
-]
+title: GSoC Ideas
+date: 2019-01-11T03:13:47.000Z
+anchor: gsoc-ideas
+replaces:
+ - 'https://developer.pidgin.im/wiki/SoCIdeas'
+lastmod: 2019-03-17T23:05:38.000Z
---
These ideas are starting points for Google Summer of Code projects that the Pidgin, Finch, and libpurple community has agreed are generally desirable and high impact. For smaller projects, community-submitted ideas, or projects that for some reason we are not sure are in scope for SoC, please see [wiki:SoCAndBountyIdeas]. (You can submit SoC proposals with those ideas, or your own ideas, as well, you just have to convince us they're suitable!)
--- a/hugo/content/gsoc/instructions.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/gsoc/instructions.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
---
-title: "GSoC Instructions"
-date: 2019-01-10T22:32:00-06:00
-anchor: "gsoc-instructions"
-replaces: [
- "developer.pidgin.im/wiki/SoCApplicationInstructions"
-]
+title: GSoC Instructions
+date: 2019-01-15T04:24:21.000Z
+anchor: gsoc-instructions
+replaces:
+ - developer.pidgin.im/wiki/SoCApplicationInstructions
+lastmod: 2019-03-17T23:05:38.000Z
---
Our project has historically allowed a wide variety of applications on topics both solicited and unsolicited, and we do not intend to change this policy. However, every application must meet some criteria, which we have set out here, to be considered.
--- a/hugo/content/i18n/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/i18n/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,4 +1,6 @@
---
-title: "Internationalization"
+title: Internationalization
+date: 2019-01-15T05:58:46.000Z
+lastmod: 2019-01-21T22:34:09.000Z
---
--- a/hugo/content/i18n/tips.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/i18n/tips.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,10 @@
---
-title: "Tips"
-anchor: "i18n-tips"
-replaces: [
- "developer.pidgin.im/wiki/TipsForTranslators",
-]
+title: Tips
+date: 2019-01-15T05:58:46.000Z
+anchor: i18n-tips
+replaces:
+ - developer.pidgin.im/wiki/TipsForTranslators
+lastmod: 2019-03-17T23:05:38.000Z
---
### Can I help translate?
--- a/hugo/content/plugins/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/plugins/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,7 +1,8 @@
---
-title: "Plugins"
-date: 2019-01-10T22:29:01-06:00
-anchor: "plugins"
+title: Plugins
+date: 2019-01-11T05:44:25.000Z
+anchor: plugins
+lastmod: 2019-04-17T01:38:41.000Z
---
{{< plugintable >}}
--- a/package-lock.json Wed Jun 05 00:19:04 2019 -0400
+++ b/package-lock.json Sun Jun 09 14:01:46 2019 -0400
@@ -850,9 +850,9 @@
}
},
"js-yaml": {
- "version": "3.12.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
- "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
--- a/package.json Wed Jun 05 00:19:04 2019 -0400
+++ b/package.json Sun Jun 09 14:01:46 2019 -0400
@@ -2,6 +2,7 @@
"private": true,
"dependencies": {
"js-beautify": "^1.8.9",
+ "js-yaml": "^3.13.1",
"svgo": "^1.1.1"
},
"devDependencies": {
--- a/tools/pre-prod.js Wed Jun 05 00:19:04 2019 -0400
+++ b/tools/pre-prod.js Sun Jun 09 14:01:46 2019 -0400
@@ -1,6 +1,8 @@
/**
* Runs after Hugo has built the site
* * Cleans, Minifies and Optimises hugo output
+ *
+ * USAGE: node tools/pre-prod [path to hugo output]
*/
/*****************************************************************************
@@ -17,7 +19,9 @@
* Set Up
*****************************************************************************/
-const target = path.join(__dirname, '../public/')
+const target =
+ // looks for a path in first arg or default to `./public/`
+ path.join(__dirname, `..`, process.argv[2] || 'public') + path.sep
const svgo = new SVGO()
const xmlRegex = /\.(html|xml)$/
@@ -45,7 +49,7 @@
*****************************************************************************/
/**
- * Format XML and HTML, removing hugo template artefacts,
+ * Format XML and HTML, removing hugo template artefacts,
* like whitespace chasms
* @param {string} path
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/update-lastmod.js Sun Jun 09 14:01:46 2019 -0400
@@ -0,0 +1,160 @@
+/**
+ * For each content page:
+ * * reads last change date form mercurial
+ * * writes last edite date to front matter
+ */
+
+/*****************************************************************************
+ * Imports
+ *****************************************************************************/
+
+const fs = require('fs').promises
+const path = require('path')
+const { spawn } = require('child_process')
+
+const front = require('front-matter')
+const yaml = require('js-yaml')
+
+/*****************************************************************************
+ * Set Up
+ *****************************************************************************/
+
+const mdRegex = /\.md$/
+const hgLogArgs = ['log', '--follow', '--pager', 'never', '--color', 'never']
+const yamlDumpSettings = { indent: 2 }
+
+/*****************************************************************************
+ * Execution
+ *****************************************************************************/
+
+getMdPaths(path.join(__dirname, '../hugo/content/')).then(paths =>
+ paths.map(async function(file) {
+ const [commits, { attributes, body }] = await Promise.all([
+ getCommits(file),
+ getFrontMatter(file),
+ ])
+ const lastmod = commits[0].date
+ const date = commits[commits.length - 1].date
+ const newFrontString = yaml
+ .dump({ ...attributes, lastmod, date }, yamlDumpSettings)
+ .trim()
+
+ const output = `---\n${newFrontString}\n---\n\n${body}`
+
+ await fs.writeFile(file, output)
+ console.log(`Updated: ${file}`)
+ })
+)
+
+/*****************************************************************************
+ * Mercurial
+ *****************************************************************************/
+
+/**
+ * Get an orderd array commits for a file
+ * @param {string} file the file path
+ */
+function getCommits(file) {
+ return new Promise((resolve, reject) => {
+ const log = spawn('hg', [...hgLogArgs, file])
+ const commits = []
+
+ log.stdout.on('data', data => {
+ commits.push(
+ ...data
+ .toString()
+ .split('\n\n')
+ .filter(Boolean)
+ .map(parseCommit)
+ .filter(filterCommits)
+ )
+ })
+
+ log.on('close', code => {
+ if (code !== 0) {
+ return reject(
+ new Error(`Unexpected return code from hg log ${code}`)
+ )
+ }
+
+ resolve(commits.sort((a, b) => a.date - b.date).reverse())
+ })
+ })
+}
+
+/**
+ * Converts the raw commit data from log into a a commit object
+ * @param {string} commitString raw commit from hg output
+ */
+function parseCommit(commitString) {
+ const commit = {}
+
+ commitString
+ .split('\n')
+ .filter(Boolean)
+ .forEach(line => {
+ const [, key, value] = /(\w+):\s+(.+)/.exec(line)
+
+ switch (key) {
+ case 'parent':
+ case 'bookmark':
+ if (!commit[key]) {
+ commit[key] = []
+ }
+
+ commit[key].push(value)
+ break
+ case 'date':
+ commit[key] = new Date(value)
+ break
+ default:
+ commit[key] = value
+ }
+ })
+
+ return commit
+}
+
+/**
+ * Filters out commits that contain an automation flag
+ * @param {commit}
+ */
+const filterCommits = ({ summary }) =>
+ !/^\[(Automated|Auto|Minor)\]/i.test(summary)
+
+/*****************************************************************************
+ * Helpers
+ *****************************************************************************/
+
+/**
+ * reads and parses a markdown file for frontmatter
+ * @param {string} file path to markdown file
+ */
+async function getFrontMatter(file) {
+ return fs.readFile(file, 'utf8').then(contents => front(contents))
+}
+
+/**
+ * creates a list of all markdown files in a directory
+ * @param {string} directory directory to search for markdown files
+ */
+async function getMdPaths(directory) {
+ let output = []
+ let items = (await fs.readdir(directory)).map(i => path.join(directory, i))
+
+ while (items.length) {
+ const item = items.pop()
+ const stat = await fs.stat(item)
+
+ if (stat.isDirectory()) {
+ const nueveau = (await fs.readdir(item)).map(i =>
+ path.join(item, i)
+ )
+ items.push(...nueveau)
+ } else if (stat.isFile() && mdRegex.test(item)) {
+ output.push(item)
+ }
+ }
+
+ return output.sort()
+}