From 3516da78641e76549b3b86fa63e8b585703b0357 Mon Sep 17 00:00:00 2001 From: Katrina Owen Date: Thu, 17 Nov 2022 14:20:12 +0100 Subject: [PATCH 1/7] labels: remove hacktoberfest-accepted I think we should not (as an org) encourage participation. Individual tracks can decide differently a year from now when Hacktoberfest rolls around again. https://github.com/exercism/org-wide-files/pull/266 --- .github/labels.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/labels.yml b/.github/labels.yml index fda346fbe..550a85bb5 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -157,11 +157,6 @@ description: "Work on Documentation" color: "ffffff" -# This label can be added to accept PRs as part of Hacktoberfest -- name: "hacktoberfest-accepted" - description: "Make this PR count for hacktoberfest" - color: "ff7518" - # This Exercism-wide label is added to all automatically created pull requests that help migrate/prepare a track for Exercism v3 - name: "v3-migration šŸ¤–" description: "Preparing for Exercism v3" From a5cfc43c45db552daf5ceb12fe95cb63c71b8ce6 Mon Sep 17 00:00:00 2001 From: Katrina Owen Date: Thu, 17 Nov 2022 14:20:12 +0100 Subject: [PATCH 2/7] labels: Add paused label This adds a label paused which lets us tag all open issues in a repository and close them, making it easy to bulk-open them when we have figured out the volunteering structure. https://github.com/exercism/org-wide-files/pull/266 --- .github/labels.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/labels.yml b/.github/labels.yml index 550a85bb5..cd759b94d 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -162,6 +162,11 @@ description: "Preparing for Exercism v3" color: "e99695" +# This Exercism-wide label can be used to bulk-close issues in preparation for pausing community contributions +- name: "paused" + description: "Work paused until further notice" + color: "e4e669" + # ----------------------------------------------------------------------------------------- # # These are the repository-specific labels that augment the Exercise-wide labels defined in # # https://github.com/exercism/org-wide-files/blob/main/global-files/.github/labels.yml. # From 838811673439dedba9d04938c24c5e268db582b7 Mon Sep 17 00:00:00 2001 From: Victor Goff Date: Tue, 31 May 2022 07:19:51 -0400 Subject: [PATCH 3/7] CODE_OF_CONDUCT: One sentence per line Exercism markdown guideline https://github.com/exercism/org-wide-files/pull/232 --- CODE_OF_CONDUCT.md | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 9bb22baa7..1774cdca9 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,17 +2,23 @@ ## Introduction -Exercism is a platform centered around empathetic conversation. We have a low tolerance for communication that makes anyone feel unwelcome, unsupported, insulted or discriminated against. +Exercism is a platform centered around empathetic conversation. +We have a low tolerance for communication that makes anyone feel unwelcome, unsupported, insulted or discriminated against. ## Seen or experienced something uncomfortable? -If you see or experience abuse, harassment, discrimination, or feel unsafe or upset, please email [abuse@exercism.org](mailto:abuse@exercism.org?subject=%5BCoC%5D) and include \[CoC\] in the subject line. We will follow up with you as a priority. +If you see or experience abuse, harassment, discrimination, or feel unsafe or upset, please email [abuse@exercism.org](mailto:abuse@exercism.org?subject=%5BCoC%5D) and include \[CoC\] in the subject line. +We will follow up with you as a priority. ## Enforcement -We actively monitor for Code of Conduct (CoC) violations and take any reports of violations extremely seriously. We have banned contributors, mentors and users due to violations. +We actively monitor for Code of Conduct (CoC) violations and take any reports of violations extremely seriously. +We have banned contributors, mentors and users due to violations. -After we receive a report of a CoC violation, we view that person's conversation history on Exercism and related communication channels and attempt to understand whether someone has deliberately broken the CoC, or accidentally crossed a line. We generally reach out to the person who has been reported to discuss any concerns we have and warn them that repeated violations will result in a ban. Sometimes we decide that no violation has occurred and that no action is required and sometimes we will also ban people on a first offense. We strive to be fair, but will err on the side of protecting the culture of our community. +After we receive a report of a CoC violation, we view that person's conversation history on Exercism and related communication channels and attempt to understand whether someone has deliberately broken the CoC, or accidentally crossed a line. +We generally reach out to the person who has been reported to discuss any concerns we have and warn them that repeated violations will result in a ban. +Sometimes we decide that no violation has occurred and that no action is required and sometimes we will also ban people on a first offense. +We strive to be fair, but will err on the side of protecting the culture of our community. Exercism's leadership reserve the right to take whatever action they feel appropriate with regards to CoC violations. @@ -43,7 +49,8 @@ As someone who is part of this community, you agree that: - We are collectively and individually committed to safety and inclusivity. - We have zero tolerance for abuse, harassment, or discrimination. - We respect people’s boundaries and identities. -- We refrain from using language that can be considered offensive or oppressive (systemically or otherwise), eg. sexist, racist, homophobic, transphobic, ableist, classist, etc. - this includes (but is not limited to) various slurs. +- We refrain from using language that can be considered offensive or oppressive (systemically or otherwise), eg. sexist, racist, homophobic, transphobic, ableist, classist, etc. + - this includes (but is not limited to) various slurs. - We avoid using offensive topics as a form of humor. We actively work towards: @@ -60,13 +67,15 @@ We condemn: - Conduct or speech which might be considered sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory or offensive in nature. - The use of unwelcome, suggestive, derogatory or inappropriate nicknames or terms. - Disrespect towards others (jokes, innuendo, dismissive attitudes) and towards differences of opinion. -- Intimidation or harassment (online or in-person). Please read the [Citizen Code of Conduct](https://github.com/stumpsyn/policies/blob/master/citizen_code_of_conduct.md) for how we interpret harassment. +- Intimidation or harassment (online or in-person). + Please read the [Citizen Code of Conduct](https://github.com/stumpsyn/policies/blob/master/citizen_code_of_conduct.md) for how we interpret harassment. - Inappropriate attention or contact. - Not understanding the differences between constructive criticism and disparagement. These things are NOT OK. -Be aware of how your actions affect others. If it makes someone uncomfortable, stop. +Be aware of how your actions affect others. +If it makes someone uncomfortable, stop. If you say something that is found offensive, and you are called out on it, try to: @@ -77,6 +86,8 @@ If you say something that is found offensive, and you are called out on it, try ## History -This policy was initially adopted from the Front-end London Slack community and has been modified since. A version history can be seen on [GitHub](https://github.com/exercism/website-copy/edit/main/pages/code_of_conduct.md). +This policy was initially adopted from the Front-end London Slack community and has been modified since. +A version history can be seen on [GitHub](https://github.com/exercism/website-copy/edit/main/pages/code_of_conduct.md). -_This policy is a "living" document, and subject to refinement and expansion in the future. This policy applies to the Exercism website, the Exercism GitHub organization, any other Exercism-related communication channels (e.g. Slack, Twitter, email) and any other Exercism entity or event._ +_This policy is a "living" document, and subject to refinement and expansion in the future. +This policy applies to the Exercism website, the Exercism GitHub organization, any other Exercism-related communication channels (e.g. Slack, Twitter, email) and any other Exercism entity or event._ From 9088a79b113b0039f9c16d82dfa544ed3eb597f5 Mon Sep 17 00:00:00 2001 From: Victor Goff Date: Tue, 31 May 2022 07:19:51 -0400 Subject: [PATCH 4/7] CODE_OF_CONDUCT: Remove periods on bullets To match style on other bullet statements in this file https://github.com/exercism/org-wide-files/pull/232 --- CODE_OF_CONDUCT.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 1774cdca9..df8e36761 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -42,16 +42,16 @@ Exercism should be a safe place for everybody regardless of - Race - Age - Religion -- Anything else you can think of. +- Anything else you can think of As someone who is part of this community, you agree that: -- We are collectively and individually committed to safety and inclusivity. -- We have zero tolerance for abuse, harassment, or discrimination. -- We respect people’s boundaries and identities. +- We are collectively and individually committed to safety and inclusivity +- We have zero tolerance for abuse, harassment, or discrimination +- We respect people’s boundaries and identities - We refrain from using language that can be considered offensive or oppressive (systemically or otherwise), eg. sexist, racist, homophobic, transphobic, ableist, classist, etc. - this includes (but is not limited to) various slurs. -- We avoid using offensive topics as a form of humor. +- We avoid using offensive topics as a form of humor We actively work towards: @@ -64,13 +64,13 @@ We condemn: - Stalking, doxxing, or publishing private information - Violence, threats of violence or violent language - Anything that compromises people’s safety -- Conduct or speech which might be considered sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory or offensive in nature. -- The use of unwelcome, suggestive, derogatory or inappropriate nicknames or terms. -- Disrespect towards others (jokes, innuendo, dismissive attitudes) and towards differences of opinion. +- Conduct or speech which might be considered sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory or offensive in nature +- The use of unwelcome, suggestive, derogatory or inappropriate nicknames or terms +- Disrespect towards others (jokes, innuendo, dismissive attitudes) and towards differences of opinion - Intimidation or harassment (online or in-person). - Please read the [Citizen Code of Conduct](https://github.com/stumpsyn/policies/blob/master/citizen_code_of_conduct.md) for how we interpret harassment. -- Inappropriate attention or contact. -- Not understanding the differences between constructive criticism and disparagement. + Please read the [Citizen Code of Conduct](https://github.com/stumpsyn/policies/blob/master/citizen_code_of_conduct.md) for how we interpret harassment +- Inappropriate attention or contact +- Not understanding the differences between constructive criticism and disparagement These things are NOT OK. @@ -79,10 +79,10 @@ If it makes someone uncomfortable, stop. If you say something that is found offensive, and you are called out on it, try to: -- Listen without interruption. -- Believe what the person is saying & do not attempt to disqualify what they have to say. -- Ask for tips / help with avoiding making the offense in the future. -- Apologize and ask forgiveness. +- Listen without interruption +- Believe what the person is saying & do not attempt to disqualify what they have to say +- Ask for tips / help with avoiding making the offense in the future +- Apologize and ask forgiveness ## History From 6fa5c0f97075d0d15ad4afcc8f47fd284cd3cd1c Mon Sep 17 00:00:00 2001 From: ee7 <45465154+ee7@users.noreply.github.com> Date: Mon, 31 Oct 2022 22:54:58 +0100 Subject: [PATCH 5/7] fetch-configlet: print success message Before this commit, `fetch-configlet` produced no output on success: $ bin/fetch-configlet $ echo $? 0 With this commit, it prints a message while downloading, and then prints the downloaded configlet version and its location: $ bin/fetch-configlet Fetching configlet... Downloaded configlet 4.0.0-beta.7 to ./bin/configlet https://github.com/exercism/configlet/issues/459 https://github.com/exercism/configlet/pull/689 --- bin/fetch-configlet | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bin/fetch-configlet b/bin/fetch-configlet index 827088ab1..243635242 100755 --- a/bin/fetch-configlet +++ b/bin/fetch-configlet @@ -59,6 +59,7 @@ main() { return 1 fi + echo "Fetching configlet..." >&2 download_url="$(get_download_url)" output_path="${output_dir}/latest-configlet.${ext}" curl "${curlopts[@]}" --output "${output_path}" "${download_url}" @@ -69,6 +70,15 @@ main() { esac rm -f "${output_path}" + + case "${os}" in + windows*) executable_ext='.exe' ;; + *) executable_ext='' ;; + esac + + configlet_path="${output_dir}/configlet${executable_ext}" + configlet_version="$(${configlet_path} --version)" + echo "Downloaded configlet ${configlet_version} to ${configlet_path}" } main From 804caaa1b9dfc8eff3a176f0721ff9aec593e3ea Mon Sep 17 00:00:00 2001 From: ee7 <45465154+ee7@users.noreply.github.com> Date: Mon, 31 Oct 2022 23:23:30 +0100 Subject: [PATCH 6/7] fetch-configlet: make some variables local From e.g. the Google Shell Style Guide [1]: Ensure that local variables are only seen inside a function and its children by using `local` when declaring them. This avoids polluting the global name space and inadvertently setting variables that may have significance outside the function. Declaration and assignment must be separate statements when the assignment value is provided by a command substitution; as the `local` builtin does not propagate the exit code from the command substitution. [1] https://google.github.io/styleguide/shellguide.html#use-local-variables https://github.com/exercism/configlet/pull/691 --- bin/fetch-configlet | 64 +++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/bin/fetch-configlet b/bin/fetch-configlet index 243635242..df2c0d908 100755 --- a/bin/fetch-configlet +++ b/bin/fetch-configlet @@ -6,29 +6,6 @@ set -eo pipefail -readonly LATEST='https://api.github.com/repos/exercism/configlet/releases/latest' - -case "$(uname)" in - Darwin*) os='mac' ;; - Linux*) os='linux' ;; - Windows*) os='windows' ;; - MINGW*) os='windows' ;; - MSYS_NT-*) os='windows' ;; - *) os='linux' ;; -esac - -case "${os}" in - windows*) ext='zip' ;; - *) ext='tgz' ;; -esac - -case "$(uname -m)" in - *64*) arch='64bit' ;; - *686*) arch='32bit' ;; - *386*) arch='32bit' ;; - *) arch='64bit' ;; -esac - curlopts=( --silent --show-error @@ -41,15 +18,25 @@ if [[ -n "${GITHUB_TOKEN}" ]]; then curlopts+=(--header "authorization: Bearer ${GITHUB_TOKEN}") fi -suffix="${os}-${arch}.${ext}" - get_download_url() { - curl "${curlopts[@]}" --header 'Accept: application/vnd.github.v3+json' "${LATEST}" | + local os="$1" + local ext="$2" + local latest='https://api.github.com/repos/exercism/configlet/releases/latest' + local arch + case "$(uname -m)" in + *64*) arch='64bit' ;; + *686*) arch='32bit' ;; + *386*) arch='32bit' ;; + *) arch='64bit' ;; + esac + local suffix="${os}-${arch}.${ext}" + curl "${curlopts[@]}" --header 'Accept: application/vnd.github.v3+json' "${latest}" | grep "\"browser_download_url\": \".*/download/.*/configlet.*${suffix}\"$" | cut -d'"' -f4 } main() { + local output_dir if [[ -d ./bin ]]; then output_dir="./bin" elif [[ $PWD == */bin ]]; then @@ -59,9 +46,26 @@ main() { return 1 fi + local os + case "$(uname)" in + Darwin*) os='mac' ;; + Linux*) os='linux' ;; + Windows*) os='windows' ;; + MINGW*) os='windows' ;; + MSYS_NT-*) os='windows' ;; + *) os='linux' ;; + esac + + local ext + case "${os}" in + windows*) ext='zip' ;; + *) ext='tgz' ;; + esac + echo "Fetching configlet..." >&2 - download_url="$(get_download_url)" - output_path="${output_dir}/latest-configlet.${ext}" + local download_url + download_url="$(get_download_url "${os}" "${ext}")" + local output_path="${output_dir}/latest-configlet.${ext}" curl "${curlopts[@]}" --output "${output_path}" "${download_url}" case "${ext}" in @@ -71,12 +75,14 @@ main() { rm -f "${output_path}" + local executable_ext case "${os}" in windows*) executable_ext='.exe' ;; *) executable_ext='' ;; esac - configlet_path="${output_dir}/configlet${executable_ext}" + local configlet_path="${output_dir}/configlet${executable_ext}" + local configlet_version configlet_version="$(${configlet_path} --version)" echo "Downloaded configlet ${configlet_version} to ${configlet_path}" } From 7ae687a6f4bc683becbf26f894960fc1cfcd9ea2 Mon Sep 17 00:00:00 2001 From: ee7 <45465154+ee7@users.noreply.github.com> Date: Fri, 11 Nov 2022 19:31:01 +0100 Subject: [PATCH 7/7] fetch-configlet: rename release assets Before this commit, the release assets were named like: configlet-linux-64bit.tgz configlet-mac-64bit.tgz configlet-windows-64bit.zip configlet_4.0.0-beta.7_checksums_sha256.txt With this commit, the next release will have assets named: configlet_4.0.0-beta.8_checksums_sha256.txt configlet_4.0.0-beta.8_linux_x86-64.tar.gz configlet_4.0.0-beta.8_macos_x86-64.tar.gz configlet_4.0.0-beta.8_windows_x86-64.zip Where we: - Make the archive naming format match that of the checksums file - Add a version string - Delimit with an underscore, not a hyphen - Rename `64bit` to `x86-64` - Rename `32bit` to `i386` - Rename `tgz` to `tar.gz` - Rename `mac` to `macos` So far, we have only released configlet for x86-64, and the release assets have always had an ambiguous `64bit` in the names. This naming format was old (added by d4c6e26836a5, 2020-10-09), and was ultimately inherited from: - the `exercism/configlet-v2` releases [1] - the `exercism/cli` releases [2][3] However, we're getting closer to adding releases for other 64-bit architectures, so it's especially important to change the names now. The rationale for the particular use of underscores and hyphens is: - We want to have the version string in the asset filenames - Configlet uses version strings that are compatible with the Semantic Versioning spec - It is more common to use hyphens in executable names than underscores - The Semantic Versioning spec forbids using an underscore, and specifies that prerelease versions can use hyphens [4]: Section 9: A pre-release version MAY be denoted by appending a hyphen and a series of dot separated identifiers immediately following the patch version. Identifiers MUST comprise only ASCII alphanumerics and hyphens [0-9A-Za-z-]. [...] Examples: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92 That is, there's an argument for the format of: some-app_1.0.0-beta.1_linux_x86-64.tar.gz rather than: some_app-1.0.0-beta.1-linux-x86_64.tar.gz because `_` fully separates the components of the first, and `-` does not separate the components of the second (due to the `-beta` part of the version string). This does ignore the convention of `_` as an inter-word space, however. [1] https://github.com/exercism/v2-configlet/releases [2] https://github.com/exercism/cli/issues/700#issuecomment-529013140 [3] https://github.com/exercism/cli/releases/tag/v3.0.12 [4] https://semver.org/ https://github.com/exercism/configlet/issues/363 https://github.com/exercism/configlet/issues/24 https://github.com/exercism/configlet/pull/705 --- bin/fetch-configlet | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bin/fetch-configlet b/bin/fetch-configlet index df2c0d908..4800e1508 100755 --- a/bin/fetch-configlet +++ b/bin/fetch-configlet @@ -24,12 +24,12 @@ get_download_url() { local latest='https://api.github.com/repos/exercism/configlet/releases/latest' local arch case "$(uname -m)" in - *64*) arch='64bit' ;; - *686*) arch='32bit' ;; - *386*) arch='32bit' ;; - *) arch='64bit' ;; + x86_64) arch='x86-64' ;; + *686*) arch='i386' ;; + *386*) arch='i386' ;; + *) arch='x86-64' ;; esac - local suffix="${os}-${arch}.${ext}" + local suffix="${os}_${arch}.${ext}" curl "${curlopts[@]}" --header 'Accept: application/vnd.github.v3+json' "${latest}" | grep "\"browser_download_url\": \".*/download/.*/configlet.*${suffix}\"$" | cut -d'"' -f4 @@ -48,7 +48,7 @@ main() { local os case "$(uname)" in - Darwin*) os='mac' ;; + Darwin*) os='macos' ;; Linux*) os='linux' ;; Windows*) os='windows' ;; MINGW*) os='windows' ;; @@ -58,8 +58,8 @@ main() { local ext case "${os}" in - windows*) ext='zip' ;; - *) ext='tgz' ;; + windows*) ext='zip' ;; + *) ext='tar.gz' ;; esac echo "Fetching configlet..." >&2