Skip to content

Commit dd046d8

Browse files
committed
Initial commit
0 parents  commit dd046d8

13 files changed

Lines changed: 5274 additions & 0 deletions

.github/FUNDING.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
github: luizbizzio
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
name: Update install release tag
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: write
11+
12+
concurrency:
13+
group: update-install-release-tag
14+
cancel-in-progress: true
15+
16+
jobs:
17+
update-install-release-tag:
18+
if: github.actor != 'github-actions[bot]'
19+
runs-on: ubuntu-latest
20+
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@v4
24+
with:
25+
fetch-depth: 0
26+
27+
- name: Read app version from tailscale-mtu.ps1
28+
id: app
29+
shell: python
30+
run: |
31+
import os
32+
import pathlib
33+
import re
34+
35+
script_path = pathlib.Path("windows/tailscale-mtu.ps1")
36+
if not script_path.is_file():
37+
raise SystemExit("Missing required file: windows/tailscale-mtu.ps1")
38+
39+
script = script_path.read_text(encoding="utf-8")
40+
match = re.search(
41+
r"\$(?:script:)?(?:AppVersion|Version)\s*=\s*['\"]([^'\"]+)['\"]",
42+
script,
43+
)
44+
45+
if not match:
46+
raise SystemExit("Could not find $AppVersion, $script:AppVersion, $Version, or $script:Version in windows/tailscale-mtu.ps1")
47+
48+
version = match.group(1).strip()
49+
50+
if not re.fullmatch(r"[0-9]+(\.[0-9]+){1,3}([-+][0-9A-Za-z.-]+)?", version):
51+
raise SystemExit(f"Invalid app version in windows/tailscale-mtu.ps1: {version}")
52+
53+
release_tag = f"v{version}"
54+
55+
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as f:
56+
f.write(f"version={version}\n")
57+
f.write(f"tag={release_tag}\n")
58+
59+
- name: Update windows/install.ps1
60+
shell: python
61+
env:
62+
RELEASE_TAG: ${{ steps.app.outputs.tag }}
63+
run: |
64+
import os
65+
import pathlib
66+
import re
67+
68+
path = pathlib.Path("windows/install.ps1")
69+
if not path.is_file():
70+
raise SystemExit("Missing required file: windows/install.ps1")
71+
72+
text = path.read_text(encoding="utf-8")
73+
tag = os.environ["RELEASE_TAG"]
74+
75+
pattern = r"\$(?:script:)?DefaultReleaseTag\s*=\s*['\"][^'\"]*['\"]"
76+
replacement = f"$DefaultReleaseTag = '{tag}'"
77+
78+
text, count = re.subn(pattern, replacement, text, count=1)
79+
80+
if count != 1:
81+
raise SystemExit("Could not update $DefaultReleaseTag in windows/install.ps1")
82+
83+
path.write_text(text, encoding="utf-8", newline="\n")
84+
85+
- name: Validate PowerShell parsing
86+
shell: pwsh
87+
run: |
88+
$ErrorActionPreference = 'Stop'
89+
$files = @(
90+
'windows/install.ps1',
91+
'windows/tailscale-mtu.ps1'
92+
)
93+
foreach ($file in $files) {
94+
$tokens = $null
95+
$errors = $null
96+
[System.Management.Automation.Language.Parser]::ParseFile($file, [ref]$tokens, [ref]$errors) | Out-Null
97+
if ($errors.Count -gt 0) {
98+
$errors | ForEach-Object { Write-Error $_.Message }
99+
throw "PowerShell parse failed: $file"
100+
}
101+
}
102+
103+
- name: Commit and push if changed
104+
shell: bash
105+
env:
106+
RELEASE_TAG: ${{ steps.app.outputs.tag }}
107+
run: |
108+
if git diff --quiet -- windows/install.ps1; then
109+
echo "windows/install.ps1 already points to $RELEASE_TAG"
110+
exit 0
111+
fi
112+
113+
git config user.name "github-actions[bot]"
114+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
115+
git add windows/install.ps1
116+
git commit -m "chore(install): set release tag to $RELEASE_TAG"
117+
git push

CODE_OF_CONDUCT.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, religion, or sexual identity
10+
and orientation.
11+
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
14+
15+
## Our Standards
16+
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
19+
20+
* Demonstrating empathy and kindness toward other people
21+
* Being respectful of differing opinions, viewpoints, and experiences
22+
* Giving and gracefully accepting constructive feedback
23+
* Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
* Focusing on what is best not just for us as individuals, but for the
26+
overall community
27+
28+
Examples of unacceptable behavior include:
29+
30+
* The use of sexualized language or imagery, and sexual attention or
31+
advances of any kind
32+
* Trolling, insulting or derogatory comments, and personal or political attacks
33+
* Public or private harassment
34+
* Publishing others' private information, such as a physical or email
35+
address, without their explicit permission
36+
* Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement Responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
Community leaders have the right and responsibility to remove, edit, or reject
47+
comments, commits, code, wiki edits, issues, and other contributions that are
48+
not aligned to this Code of Conduct, and will communicate reasons for moderation
49+
decisions when appropriate.
50+
51+
## Scope
52+
53+
This Code of Conduct applies within all community spaces, and also applies when
54+
an individual is officially representing the community in public spaces.
55+
Examples of representing our community include using an official e-mail address,
56+
posting via an official social media account, or acting as an appointed
57+
representative at an online or offline event.
58+
59+
## Enforcement
60+
61+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
62+
reported to the community leaders responsible for enforcement at
63+
contact@luizbizzio.com.
64+
All complaints will be reviewed and investigated promptly and fairly.
65+
66+
All community leaders are obligated to respect the privacy and security of the
67+
reporter of any incident.
68+
69+
## Enforcement Guidelines
70+
71+
Community leaders will follow these Community Impact Guidelines in determining
72+
the consequences for any action they deem in violation of this Code of Conduct:
73+
74+
### 1. Correction
75+
76+
**Community Impact**: Use of inappropriate language or other behavior deemed
77+
unprofessional or unwelcome in the community.
78+
79+
**Consequence**: A private, written warning from community leaders, providing
80+
clarity around the nature of the violation and an explanation of why the
81+
behavior was inappropriate. A public apology may be requested.
82+
83+
### 2. Warning
84+
85+
**Community Impact**: A violation through a single incident or series
86+
of actions.
87+
88+
**Consequence**: A warning with consequences for continued behavior. No
89+
interaction with the people involved, including unsolicited interaction with
90+
those enforcing the Code of Conduct, for a specified period of time. This
91+
includes avoiding interactions in community spaces as well as external channels
92+
like social media. Violating these terms may lead to a temporary or
93+
permanent ban.
94+
95+
### 3. Temporary Ban
96+
97+
**Community Impact**: A serious violation of community standards, including
98+
sustained inappropriate behavior.
99+
100+
**Consequence**: A temporary ban from any sort of interaction or public
101+
communication with the community for a specified period of time. No public or
102+
private interaction with the people involved, including unsolicited interaction
103+
with those enforcing the Code of Conduct, is allowed during this period.
104+
Violating these terms may lead to a permanent ban.
105+
106+
### 4. Permanent Ban
107+
108+
**Community Impact**: Demonstrating a pattern of violation of community
109+
standards, including sustained inappropriate behavior, harassment of an
110+
individual, or aggression toward or disparagement of classes of individuals.
111+
112+
**Consequence**: A permanent ban from any sort of public interaction within
113+
the community.
114+
115+
## Attribution
116+
117+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118+
version 2.0, available at
119+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120+
121+
Community Impact Guidelines were inspired by [Mozilla's code of conduct
122+
enforcement ladder](https://github.com/mozilla/diversity).
123+
124+
[homepage]: https://www.contributor-covenant.org
125+
126+
For answers to common questions about this code of conduct, see the FAQ at
127+
https://www.contributor-covenant.org/faq. Translations are available at
128+
https://www.contributor-covenant.org/translations.

0 commit comments

Comments
 (0)