From 74ed6984b53bac85901a6772652b70e0b24da14b Mon Sep 17 00:00:00 2001 From: Siyana Zdravkova <52591976+BlueButterflies@users.noreply.github.com> Date: Thu, 26 Jun 2025 21:05:46 +0200 Subject: [PATCH 01/60] Update security-best-practices-for-your-project.md Translated file security-best-practices-for-your-project.md in Bulgarian language --- ...ecurity-best-practices-for-your-project.md | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/_articles/bg/security-best-practices-for-your-project.md b/_articles/bg/security-best-practices-for-your-project.md index c1dd5f06a3f..edba547becb 100644 --- a/_articles/bg/security-best-practices-for-your-project.md +++ b/_articles/bg/security-best-practices-for-your-project.md @@ -1,84 +1,84 @@ --- lang: bg untranslated: true -title: Security Best Practices for your Project -description: Strengthen your project's future by building trust through essential security practices — from MFA and code scanning to safe dependency management and private vulnerability reporting. +title: Най-добри практики за сигурност за вашия проект +description: Укрепете бъдещето на вашия проект, като изградите доверие чрез основни практики за сигурност – от многофакторна автентификация (MFA) и сканиране на код до безопасно управление на зависимостите и отчитане на частни уязвимости. class: security-best-practices order: -1 image: /assets/images/cards/security-best-practices.png --- -Bugs and new features aside, a project's longevity hinges not only on its usefulness but also on the trust it earns from its users. Strong security measures are important to keep this trust alive. Here are some important actions you can take to significantly improve your project's security. +Като оставим настрана грешките и новите функции, дълголетието на един проект зависи не само от неговата полезност, но и от доверието, което печели от своите потребители. Силните мерки за сигурност са важни, за да се запази това доверие. Ето някои важни действия, които можете да предприемете, за да подобрите значително сигурността на вашия проект. -## Ensure all privileged contributors have enabled Multi-Factor Authentication (MFA) +## Уверете се, че всички привилегировани участници са активирали многофакторно удостоверяване (MFA) -### A malicious actor who manages to impersonate a privileged contributor to your project, will cause catastrophic damages. +### Злонамерен участник, който успее да се представи за привилегирован участник във вашия проект, ще причини катастрофални щети. -Once they obtain the privileged access, this actor can modify your code to make it perform unwanted actions (e.g. mine cryptocurrency), or can distribute malware to your users' infrastructure, or can access private code repositories to exfiltrate intellectual property and sensitive data, including credentials to other services. +След като получи привилегирован достъп, този участник може да промени вашия код, за да го накара да извършва нежелани действия (напр. да копае криптовалута), или може да разпространява зловреден софтуер в инфраструктурата на вашите потребители, или може да има достъп до частни хранилища за код, за да открадне интелектуална собственост и чувствителни данни, включително идентификационни данни за други услуги. -MFA provides an additional layer of security against account takeover. Once enabled, you have to log in with your username and password and provide another form of authentication that only you know or have access to. +MFA предоставя допълнителен слой сигурност срещу поглъщане на акаунт. След като бъде активирана, трябва да влезете с потребителското си име и парола и да предоставите друга форма на удостоверяване, която само вие знаете или до която имате достъп. -## Secure your code as part of your development workflow +## Защитете кода си като част от работния процес на разработка -### Security vulnerabilities in your code are cheaper to fix when detected early in the process than later, when they are used in production. +### Уязвимостите в сигурността на вашия код са по-евтини за отстраняване, когато бъдат открити в началото на процеса, отколкото по-късно, когато се използват в продукцията. -Use a Static Application Security Testing (SAST) tool to detect security vulnerabilities in your code. These tools are operating at code level and don't need an executing environment, and therefore can be executed early in the process, and can be seamlessly integrated in your usual development workflow, during the build or during the code review phases. +Използвайте инструмент за статично тестване на сигурността на приложенията (SAST), за да откриете уязвимости в сигурността на вашия код. Тези инструменти работят на ниво код и не се нуждаят от среда за изпълнение, следователно могат да бъдат изпълнени в началото на процеса и могат да бъдат безпроблемно интегрирани в обичайния ви работен процес на разработка, по време на изграждането или по време на фазите на преглед на кода. -It's like having a skilled expert look over your code repository, helping you find common security vulnerabilities that could be hiding in plain sight as you code. +Все едно квалифициран експерт да прегледа вашето хранилище за код, помагайки ви да откриете често срещани уязвимости в сигурността, които биха могли да се крият на видно място, докато кодирате. -How to choose your SAST tool? -Check the license: Some tools are free for open source projects. For example GitHub CodeQL or SemGrep. -Check the coverage for your language(s) +Как да изберете вашия SAST инструмент? +Проверете лиценза: Някои инструменти са безплатни за проекти с отворен код. Например GitHub CodeQL или SemGrep. +Проверете покритието за вашия(ите) език(ци) -* Select one that easily integrates with the tools you already use, with your existing process. For example, it's better if the alerts are available as part of your existing code review process and tool, rather than going to another tool to see them. -* Beware of False Positives! You don't want the tool to slow you down for no reason! -* Check the features: some tools are very powerful and can do taint tracking (example: GitHub CodeQL), some propose AI-generated fix suggestions, some make it easier to write custom queries (example: SemGrep). +* Изберете такъв, който лесно се интегрира с инструментите, които вече използвате, със съществуващия ви процес. Например, по-добре е, ако предупрежденията са налични като част от съществуващия ви процес и инструмент за преглед на код, вместо да използвате друг инструмент, за да ги видите. +* Пазете се от фалшиви положителни резултати! Не искате инструментът да ви забавя без причина! +* Проверете функциите: някои инструменти са много мощни и могат да проследяват дефекти (пример: GitHub CodeQL), някои предлагат генерирани от изкуствен интелект предложения за корекции, а трети улесняват писането на персонализирани заявки (пример: SemGrep). -## Don't share your secrets +## Не споделяйте тайните си -### Sensitive data, such as API keys, tokens, and passwords, can sometimes accidentally get committed to your repository. +### Чувствителни данни, като API ключове, токени и пароли, понякога могат случайно да бъдат добавени към вашето хранилище. -Imagine this scenario: You are the maintainer of a popular open-source project with contributions from developers worldwide. One day, a contributor unknowingly commits to the repository some API keys of a third-party service. Days later, someone finds these keys and uses them to get into the service without permission. The service is compromised, users of your project experience downtime, and your project's reputation takes a hit. As the maintainer, you're now faced with the daunting tasks of revoking compromised secrets, investigating what malicious actions the attacker could have performed with this secret, notifying affected users, and implementing fixes. +Представете си следния сценарий: Вие сте администратор на популярен проект с отворен код, в който участват разработчици от цял ​​свят. Един ден, сътрудник, без да знае, добавя към хранилището някои API ключове на услуга на трета страна. Няколко дни по-късно, някой намира тези ключове и ги използва, за да влезе в услугата без разрешение. Услугата е компрометирана, потребителите на вашия проект изпитват прекъсвания и репутацията на проекта ви е засегната. Като администратор, вие сте изправени пред трудните задачи за отмяна на компрометирани тайни, разследване на злонамерени действия, които атакуващият би могъл да извърши с тази тайна, уведомяване на засегнатите потребители и внедряване на корекции. -To prevent such incidents, "secret scanning" solutions exist to help you detect those secrets in your code. Some tools like GitHub Secret Scanning, and Trufflehog by Truffle Security can prevent you from pushing them to remote branches in the first place, and some tools will automatically revoke some secrets for you. +За да се предотвратят подобни инциденти, съществуват решения за "сканиране на тайни", които ви помагат да откриете тези тайни в кода си. Някои инструменти като GitHub Secret Scanning и Trufflehog от Truffle Security могат да ви попречат да ги преместите в отдалечени клонове, а някои инструменти автоматично ще отменят някои тайни вместо вас. -## Check and update your dependencies +## Проверете и актуализирайте зависимостите си -### Dependencies in your project can have vulnerabilities that compromise the security of your project. Manually keeping dependencies up to date can be a time-consuming task. +### Зависимостите във вашия проект могат да имат уязвимости, които компрометират сигурността му. Ръчното поддържане на зависимостите актуални може да бъде отнемаща време задача. -Picture this: a project built on the sturdy foundation of a widely-used library. The library later finds a big security problem, but the people who built the application using it don't know about it. Sensitive user data is left exposed when an attacker takes advantage of this weakness, swooping in to grab it. This is not a theoretical case. This is exactly what happened to Equifax in 2017: They failed to update their Apache Struts dependency after the notification that a severe vulnerability was detected. It was exploited, and the infamous Equifax breach affected 144 million users' data. +Представете си: проект, изграден върху здравата основа на широко използвана библиотека. Библиотеката по-късно открива голям проблем със сигурността, но хората, които са изградили приложението, използвайки я, не знаят за него. Чувствителни потребителски данни остават изложени на риск, когато атакуващ се възползва от тази слабост и се нахвърли, за да ги грабне. Това не е теоретичен случай. Точно това се случи с Equifax през 2017 г.: Те не успяха да актуализират зависимостта си от Apache Struts след известието, че е открита сериозна уязвимост. Тя беше експлоатирана и скандалният пробив в Equifax засегна данните на 144 милиона потребители. -To prevent such scenarios, Software Composition Analysis (SCA) tools such as Dependabot and Renovate automatically check your dependencies for known vulnerabilities published in public databases such as the NVD or the GitHub Advisory Database, and then creates pull requests to update them to safe versions. Staying up-to-date with the latest safe dependency versions safeguards your project from potential risks. +За да предотвратят подобни сценарии, инструменти за анализ на състава на софтуера (SCA), като Dependabot и Renovate, автоматично проверяват вашите зависимости за известни уязвимости, публикувани в публични бази данни като NVD или GitHub Advisory Database, и след това създават заявки за изтегляне, за да ги актуализират до безопасни версии. Поддържането на актуалност с най-новите безопасни версии на зависимостите предпазва вашия проект от потенциални рискове. -## Avoid unwanted changes with protected branches +## Избягвайте нежелани промени със защитени клонове -### Unrestricted access to your main branches can lead to accidental or malicious changes that may introduce vulnerabilities or disrupt the stability of your project. +### Неограниченият достъп до основните ви клонове може да доведе до случайни или злонамерени промени, които могат да въведат уязвимости или да нарушат стабилността на проекта ви. -A new contributor gets write access to the main branch and accidentally pushes changes that have not been tested. A dire security flaw is then uncovered, courtesy of the latest changes. To prevent such issues, branch protection rules ensure that changes cannot be pushed or merged into important branches without first undergoing reviews and passing specified status checks. You're safer and better off with this extra measure in place, guaranteeing top-notch quality every time. +Нов участник получава достъп за запис в основния клон и случайно публикува промени, които не са тествани. След това се разкрива сериозен пропуск в сигурността, благодарение на последните промени. За да се предотвратят подобни проблеми, правилата за защита на клоновете гарантират, че промените не могат да бъдат публикувани или обединявани във важни клонове, без първо да бъдат прегледани и да преминат през определени проверки за състояние. С тази допълнителна мярка сте в по-голяма безопасност и по-добре, гарантирайки първокласно качество всеки път. -## Set up an intake mechanism for vulnerability reporting +## Настройте механизъм за прием на данни за докладване на уязвимости -### It's a good practice to make it easy for your users to report bugs, but the big question is: when this bug has a security impact, how can they safely report them to you without putting a target on you for malicious hackers? +### Добра практика е да улесните потребителите си да докладват за грешки, но големият въпрос е: когато тази грешка има въздействие върху сигурността, как могат безопасно да ви я докладват, без да ви поставят в цел за злонамерени хакери? -Picture this: A security researcher discovers a vulnerability in your project but finds no clear or secure way to report it. Without a designated process, they might create a public issue or discuss it openly on social media. Even if they are well-intentioned and offer a fix, if they do it with a public pull request, others will see it before it's merged! This public disclosure will expose the vulnerability to malicious actors before you have a chance to address it, potentially leading to a zero-day exploit, attacking your project and its users. +Представете си: Изследовател по сигурността открива уязвимост във вашия проект, но не намира ясен или сигурен начин да я докладва. Без определен процес, той може да създаде публичен проблем или да го обсъди открито в социалните медии. Дори и да е добронамерен и да предложи поправка, ако го направи с публична заявка за изтегляне, други ще я видят, преди да бъде обединена! Това публично разкриване ще изложи уязвимостта на злонамерени лица, преди да имате шанс да я отстраните, което потенциално ще доведе до експлойт от нулев ден, атакуващ вашия проект и неговите потребители. -### Security Policy +### Политика за сигурност -To avoid this, publish a security policy. A security policy, defined in a `SECURITY.md` file, details the steps for reporting security concerns, creating a transparent process for coordinated disclosure, and establishing the project team's responsibilities for addressing reported issues. This security policy can be as simple as "Please don't publish details in a public issue or PR, send us a private email at security@example.com", but can also contain other details such as when they should expect to receive an answer from you. Anything that can help the effectiveness and the efficiency of the disclosure process. +За да избегнете това, публикувайте политика за сигурност. Политиката за сигурност, дефинирана във файл `SECURITY.md`, описва подробно стъпките за докладване на проблеми със сигурността, създава прозрачен процес за координирано разкриване и установява отговорностите на екипа на проекта за справяне с докладваните проблеми. Тази политика за сигурност може да бъде толкова проста, колкото "Моля, не публикувайте подробности в публичен проблем или PR, изпратете ни личен имейл на security@example.com", но може да съдържа и други подробности, като например кога могат да очакват да получат отговор от вас. Всичко, което може да помогне за ефективността и ефикасността на процеса на разкриване. -### Private Vulnerability Reporting +### Частно докладване на уязвимости -On some platforms, you can streamline and strengthen your vulnerability management process, from intake to broadcast, with private issues. On GitLab, this can be done with private issues. On GitHub, this is called private vulnerability reporting (PVR). PVR enables maintainers to receive and address vulnerability reports, all within the GitHub platform. GitHub will automatically create a private fork to write the fixes, and a draft security advisory. All of this remains confidential until you decide to disclose the issues and release the fixes. To close the loop, security advisories will be published, and will inform and protect all your users through their SCA tool. +На някои платформи можете да рационализирате и подобрите процеса си на управление на уязвимости, от приемане до излъчване, с частни проблеми. В GitLab това може да се направи с частни проблеми. В GitHub това се нарича частно докладване на уязвимости (PVR). PVR позволява на поддържащите да получават и адресират доклади за уязвимости, всичко това в рамките на платформата GitHub. GitHub автоматично ще създаде частен fork за писане на корекциите и проект на съобщение за сигурност. Всичко това остава поверително, докато не решите да разкриете проблемите и да публикувате корекциите. За да се затвори цикълът, ще бъдат публикувани съобщения за сигурност, които ще информират и защитават всички ваши потребители чрез техния SCA инструмент. -## Conclusion: A few steps for you, a huge improvement for your users +## Заключение: Няколко стъпки за вас, огромно подобрение за вашите потребители -These few steps might seem easy or basic to you, but they go a long way to make your project more secure for its users, because they will provide protection against the most common issues. +Тези няколко стъпки може да ви се сторят лесни или основни, но те са от голяма полза за по-голяма сигурност на вашия проект за неговите потребители, защото ще осигурят защита срещу най-често срещаните проблеми. -## Contributors +## Сътрудници -### Many thanks to all the maintainers who shared their experiences and tips with us for this guide! +### Много благодарности на всички администратори, които споделиха своя опит и съвети с нас за това ръководство! -This guide was written by [@nanzggits](https://github.com/nanzggits) & [@xcorail](https://github.com/xcorail) with contributions from: +Това ръководство е написано от [@nanzggits](https://github.com/nanzggits) & [@xcorail](https://github.com/xcorail) с приноси от: [@JLLeitschuh](https://github.com/JLLeitschuh) -[@intrigus-lgtm](https://github.com/intrigus-lgtm) + many others! +[@intrigus-lgtm](https://github.com/intrigus-lgtm) + много други! From b1c9c5ab5e165fa9df8797aa737a58b7569b0dfd Mon Sep 17 00:00:00 2001 From: Siyana Zdravkova <52591976+BlueButterflies@users.noreply.github.com> Date: Thu, 26 Jun 2025 21:14:52 +0200 Subject: [PATCH 02/60] Update security-best-practices-for-your-project.md Translated file security-best-practices-for-your-project.md in italian language --- ...ecurity-best-practices-for-your-project.md | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/_articles/it/security-best-practices-for-your-project.md b/_articles/it/security-best-practices-for-your-project.md index 13026ec4831..27318a9556a 100644 --- a/_articles/it/security-best-practices-for-your-project.md +++ b/_articles/it/security-best-practices-for-your-project.md @@ -1,84 +1,84 @@ --- lang: it untranslated: true -title: Security Best Practices for your Project -description: Strengthen your project's future by building trust through essential security practices — from MFA and code scanning to safe dependency management and private vulnerability reporting. +title: Le migliori pratiche di sicurezza per il tuo progetto +description: Rafforza il futuro del tuo progetto creando fiducia attraverso pratiche di sicurezza essenziali, dall'MFA e dalla scansione del codice alla gestione sicura delle dipendenze e alla segnalazione di vulnerabilità private. class: security-best-practices order: -1 image: /assets/images/cards/security-best-practices.png --- -Bugs and new features aside, a project's longevity hinges not only on its usefulness but also on the trust it earns from its users. Strong security measures are important to keep this trust alive. Here are some important actions you can take to significantly improve your project's security. +A parte bug e nuove funzionalità, la longevità di un progetto dipende non solo dalla sua utilità, ma anche dalla fiducia che guadagna dai suoi utenti. Misure di sicurezza efficaci sono fondamentali per mantenere viva questa fiducia. Ecco alcune azioni importanti che puoi intraprendere per migliorare significativamente la sicurezza del tuo progetto. -## Ensure all privileged contributors have enabled Multi-Factor Authentication (MFA) +## Assicurati che tutti i collaboratori con privilegi abbiano abilitato l'autenticazione a più fattori (MFA) -### A malicious actor who manages to impersonate a privileged contributor to your project, will cause catastrophic damages. +### Un malintenzionato che riesca a impersonare un collaboratore con privilegi nel tuo progetto causerà danni catastrofici. -Once they obtain the privileged access, this actor can modify your code to make it perform unwanted actions (e.g. mine cryptocurrency), or can distribute malware to your users' infrastructure, or can access private code repositories to exfiltrate intellectual property and sensitive data, including credentials to other services. +Una volta ottenuto l'accesso con privilegi, questo malintenzionato può modificare il tuo codice per eseguire azioni indesiderate (ad esempio, estrarre criptovalute), oppure può distribuire malware all'infrastruttura dei tuoi utenti, o ancora può accedere a repository di codice privati ​​per esfiltrare proprietà intellettuale e dati sensibili, incluse le credenziali di accesso ad altri servizi. -MFA provides an additional layer of security against account takeover. Once enabled, you have to log in with your username and password and provide another form of authentication that only you know or have access to. +L'MFA fornisce un ulteriore livello di sicurezza contro il furto di account. Una volta abilitata, devi accedere con il tuo nome utente e password e fornire un'altra forma di autenticazione che solo tu conosci o a cui hai accesso. -## Secure your code as part of your development workflow +## Proteggi il tuo codice come parte del tuo flusso di lavoro di sviluppo -### Security vulnerabilities in your code are cheaper to fix when detected early in the process than later, when they are used in production. +### Le vulnerabilità di sicurezza nel tuo codice sono più economiche da risolvere se rilevate nelle prime fasi del processo rispetto a quando vengono utilizzate in produzione. -Use a Static Application Security Testing (SAST) tool to detect security vulnerabilities in your code. These tools are operating at code level and don't need an executing environment, and therefore can be executed early in the process, and can be seamlessly integrated in your usual development workflow, during the build or during the code review phases. +Utilizza uno strumento SAST (Static Application Security Testing) per rilevare le vulnerabilità di sicurezza nel tuo codice. Questi strumenti operano a livello di codice e non necessitano di un ambiente di esecuzione, quindi possono essere eseguiti nelle prime fasi del processo e possono essere integrati perfettamente nel tuo consueto flusso di lavoro di sviluppo, durante la build o durante le fasi di revisione del codice. -It's like having a skilled expert look over your code repository, helping you find common security vulnerabilities that could be hiding in plain sight as you code. +È come avere un esperto qualificato che esamina il tuo repository di codice, aiutandoti a trovare vulnerabilità di sicurezza comuni che potrebbero nascondersi alla vista durante la scrittura del codice. -How to choose your SAST tool? -Check the license: Some tools are free for open source projects. For example GitHub CodeQL or SemGrep. -Check the coverage for your language(s) +Come scegliere il tuo strumento SAST? +Verifica la licenza: alcuni strumenti sono gratuiti per i progetti open source. Ad esempio, GitHub CodeQL o SemGrep. +Verifica la copertura per i tuoi linguaggi -* Select one that easily integrates with the tools you already use, with your existing process. For example, it's better if the alerts are available as part of your existing code review process and tool, rather than going to another tool to see them. -* Beware of False Positives! You don't want the tool to slow you down for no reason! -* Check the features: some tools are very powerful and can do taint tracking (example: GitHub CodeQL), some propose AI-generated fix suggestions, some make it easier to write custom queries (example: SemGrep). +* Selezionane uno che si integri facilmente con gli strumenti che già utilizzi e con il tuo processo esistente. Ad esempio, è meglio se gli avvisi sono disponibili come parte del tuo processo di revisione del codice e del tuo strumento, piuttosto che passare a un altro strumento per visualizzarli. +* Attenzione ai falsi positivi! Non vorrai certo che lo strumento ti rallenti senza motivo! +* Controlla le funzionalità: alcuni strumenti sono molto potenti e possono tracciare i taint (ad esempio: GitHub CodeQL), alcuni propongono suggerimenti di correzione generati dall'intelligenza artificiale, altri semplificano la scrittura di query personalizzate (ad esempio: SemGrep). -## Don't share your secrets +## Non condividere i tuoi segreti -### Sensitive data, such as API keys, tokens, and passwords, can sometimes accidentally get committed to your repository. +### Dati sensibili, come chiavi API, token e password, a volte possono essere accidentalmente inseriti nel tuo repository. -Imagine this scenario: You are the maintainer of a popular open-source project with contributions from developers worldwide. One day, a contributor unknowingly commits to the repository some API keys of a third-party service. Days later, someone finds these keys and uses them to get into the service without permission. The service is compromised, users of your project experience downtime, and your project's reputation takes a hit. As the maintainer, you're now faced with the daunting tasks of revoking compromised secrets, investigating what malicious actions the attacker could have performed with this secret, notifying affected users, and implementing fixes. +Immagina questo scenario: sei il responsabile della manutenzione di un popolare progetto open source con contributi di sviluppatori da tutto il mondo. Un giorno, un collaboratore inserisce inconsapevolmente nel repository alcune chiavi API di un servizio di terze parti. Giorni dopo, qualcuno trova queste chiavi e le usa per accedere al servizio senza autorizzazione. Il servizio viene compromesso, gli utenti del tuo progetto subiscono tempi di inattività e la reputazione del tuo progetto ne risente. Come responsabile della manutenzione, ora ti trovi ad affrontare il difficile compito di revocare i segreti compromessi, indagare sulle azioni dannose che l'attaccante potrebbe aver compiuto con questi segreti, avvisare gli utenti interessati e implementare le correzioni. -To prevent such incidents, "secret scanning" solutions exist to help you detect those secrets in your code. Some tools like GitHub Secret Scanning, and Trufflehog by Truffle Security can prevent you from pushing them to remote branches in the first place, and some tools will automatically revoke some secrets for you. +Per prevenire tali incidenti, esistono soluzioni di "scansione dei segreti" che ti aiutano a individuare tali segreti nel tuo codice. Alcuni strumenti come GitHub Secret Scanning e Trufflehog di Truffle Security possono impedirti di inviarli a branch remoti, mentre altri strumenti revocheranno automaticamente alcuni segreti per te. -## Check and update your dependencies +## Controlla e aggiorna le tue dipendenze -### Dependencies in your project can have vulnerabilities that compromise the security of your project. Manually keeping dependencies up to date can be a time-consuming task. +### Le dipendenze nel tuo progetto possono presentare vulnerabilità che ne compromettono la sicurezza. Mantenere aggiornate manualmente le dipendenze può essere un'attività che richiede molto tempo. -Picture this: a project built on the sturdy foundation of a widely-used library. The library later finds a big security problem, but the people who built the application using it don't know about it. Sensitive user data is left exposed when an attacker takes advantage of this weakness, swooping in to grab it. This is not a theoretical case. This is exactly what happened to Equifax in 2017: They failed to update their Apache Struts dependency after the notification that a severe vulnerability was detected. It was exploited, and the infamous Equifax breach affected 144 million users' data. +Immagina questo: un progetto costruito sulle solide fondamenta di una libreria ampiamente utilizzata. In seguito, la libreria rileva un grave problema di sicurezza, ma le persone che hanno sviluppato l'applicazione utilizzandola non ne sono a conoscenza. I dati sensibili degli utenti rimangono esposti quando un aggressore sfrutta questa vulnerabilità, tentando di appropriarsene. Questo non è un caso teorico. È esattamente quello che è successo a Equifax nel 2017: non sono riusciti ad aggiornare la loro dipendenza Apache Struts dopo la notifica del rilevamento di una grave vulnerabilità. La vulnerabilità è stata sfruttata e la famigerata violazione di Equifax ha interessato i dati di 144 milioni di utenti. -To prevent such scenarios, Software Composition Analysis (SCA) tools such as Dependabot and Renovate automatically check your dependencies for known vulnerabilities published in public databases such as the NVD or the GitHub Advisory Database, and then creates pull requests to update them to safe versions. Staying up-to-date with the latest safe dependency versions safeguards your project from potential risks. +Per prevenire tali scenari, strumenti di analisi della composizione del software (SCA) come Dependabot e Renovate controllano automaticamente le dipendenze alla ricerca di vulnerabilità note pubblicate in database pubblici come NVD o GitHub Advisory Database, e quindi creano richieste pull per aggiornarle a versioni sicure. Rimanere aggiornati con le ultime versioni delle dipendenze sicure salvaguarda il progetto da potenziali rischi. -## Avoid unwanted changes with protected branches +## Evita modifiche indesiderate con branch protetti -### Unrestricted access to your main branches can lead to accidental or malicious changes that may introduce vulnerabilities or disrupt the stability of your project. +### L'accesso illimitato ai tuoi branch principali può portare a modifiche accidentali o dolose che potrebbero introdurre vulnerabilità o compromettere la stabilità del tuo progetto. -A new contributor gets write access to the main branch and accidentally pushes changes that have not been tested. A dire security flaw is then uncovered, courtesy of the latest changes. To prevent such issues, branch protection rules ensure that changes cannot be pushed or merged into important branches without first undergoing reviews and passing specified status checks. You're safer and better off with this extra measure in place, guaranteeing top-notch quality every time. +Un nuovo collaboratore ottiene l'accesso in scrittura al branch principale e inserisce accidentalmente modifiche che non sono state testate. In questo modo, grazie alle ultime modifiche, viene scoperta una grave falla di sicurezza. Per prevenire tali problemi, le regole di protezione dei branch garantiscono che le modifiche non possano essere inserite o unite in branch importanti senza prima essere sottoposte a revisione e aver superato specifici controlli di stato. Con questa misura aggiuntiva, che garantisce la massima qualità ogni volta, sei più sicuro e in una posizione migliore. -## Set up an intake mechanism for vulnerability reporting +## Imposta un meccanismo di acquisizione per la segnalazione delle vulnerabilità -### It's a good practice to make it easy for your users to report bugs, but the big question is: when this bug has a security impact, how can they safely report them to you without putting a target on you for malicious hackers? +### È una buona pratica semplificare la segnalazione dei bug da parte degli utenti, ma la domanda fondamentale è: quando un bug ha un impatto sulla sicurezza, come possono segnalartelo in modo sicuro senza renderti un bersaglio per hacker malintenzionati? -Picture this: A security researcher discovers a vulnerability in your project but finds no clear or secure way to report it. Without a designated process, they might create a public issue or discuss it openly on social media. Even if they are well-intentioned and offer a fix, if they do it with a public pull request, others will see it before it's merged! This public disclosure will expose the vulnerability to malicious actors before you have a chance to address it, potentially leading to a zero-day exploit, attacking your project and its users. +Immagina questa situazione: un ricercatore di sicurezza scopre una vulnerabilità nel tuo progetto ma non trova un modo chiaro o sicuro per segnalarla. Senza un processo definito, potrebbero creare un problema pubblico o discuterne apertamente sui social media. Anche se fossero ben intenzionati e offrissero una soluzione, se lo facessero con una pull request pubblica, altri la vedrebbero prima che venga integrata! Questa divulgazione pubblica esporrebbe la vulnerabilità a malintenzionati prima che tu abbia la possibilità di risolverla, portando potenzialmente a un exploit zero-day che attaccherebbe il tuo progetto e i suoi utenti. -### Security Policy +### Policy di sicurezza -To avoid this, publish a security policy. A security policy, defined in a `SECURITY.md` file, details the steps for reporting security concerns, creating a transparent process for coordinated disclosure, and establishing the project team's responsibilities for addressing reported issues. This security policy can be as simple as "Please don't publish details in a public issue or PR, send us a private email at security@example.com", but can also contain other details such as when they should expect to receive an answer from you. Anything that can help the effectiveness and the efficiency of the disclosure process. +Per evitare questo problema, pubblica una policy di sicurezza. Una policy di sicurezza, definita in un file `SECURITY.md`, descrive i passaggi per segnalare problemi di sicurezza, creare un processo trasparente per la divulgazione coordinata e stabilire le responsabilità del team di progetto per la gestione dei problemi segnalati. Questa policy di sicurezza può essere semplice come "Si prega di non pubblicare dettagli in un problema pubblico o in una PR, inviarci un'e-mail privata a security@example.com", ma può anche contenere altri dettagli, come ad esempio quando dovrebbero aspettarsi di ricevere una risposta da te. Tutto ciò che può contribuire all'efficacia e all'efficienza del processo di divulgazione. -### Private Vulnerability Reporting +### Segnalazione di vulnerabilità private -On some platforms, you can streamline and strengthen your vulnerability management process, from intake to broadcast, with private issues. On GitLab, this can be done with private issues. On GitHub, this is called private vulnerability reporting (PVR). PVR enables maintainers to receive and address vulnerability reports, all within the GitHub platform. GitHub will automatically create a private fork to write the fixes, and a draft security advisory. All of this remains confidential until you decide to disclose the issues and release the fixes. To close the loop, security advisories will be published, and will inform and protect all your users through their SCA tool. +Su alcune piattaforme, è possibile semplificare e rafforzare il processo di gestione delle vulnerabilità, dall'acquisizione alla trasmissione, con segnalazioni private. Su GitLab, questo è possibile grazie alle segnalazioni private. Su GitHub, questo si chiama segnalazione di vulnerabilità private (PVR). La PVR consente ai manutentori di ricevere e gestire le segnalazioni di vulnerabilità, il tutto all'interno della piattaforma GitHub. GitHub creerà automaticamente un fork privato per scrivere le correzioni e una bozza di avviso di sicurezza. Tutto ciò rimane riservato finché non si decide di divulgare le segnalazioni e rilasciare le correzioni. Per chiudere il cerchio, verranno pubblicati avvisi di sicurezza che informeranno e proteggeranno tutti gli utenti tramite il loro strumento SCA. -## Conclusion: A few steps for you, a huge improvement for your users +## Conclusione: pochi passaggi per te, un enorme miglioramento per i tuoi utenti -These few steps might seem easy or basic to you, but they go a long way to make your project more secure for its users, because they will provide protection against the most common issues. +Questi pochi passaggi potrebbero sembrarti facili o basilari, ma contribuiscono notevolmente a rendere il tuo progetto più sicuro per i suoi utenti, perché forniranno protezione dai problemi più comuni. -## Contributors +## Collaboratori -### Many thanks to all the maintainers who shared their experiences and tips with us for this guide! +### Un ringraziamento speciale a tutti i responsabili della manutenzione che hanno condiviso con noi le loro esperienze e i loro suggerimenti per questa guida! -This guide was written by [@nanzggits](https://github.com/nanzggits) & [@xcorail](https://github.com/xcorail) with contributions from: +Questa guida è stata scritta da [@nanzggits](https://github.com/nanzggits) & [@xcorail](https://github.com/xcorail) con contributi di: [@JLLeitschuh](https://github.com/JLLeitschuh) -[@intrigus-lgtm](https://github.com/intrigus-lgtm) + many others! +[@intrigus-lgtm](https://github.com/intrigus-lgtm) + molti altri! From 3b803626c4c8218acbd773b5318c290b86b04645 Mon Sep 17 00:00:00 2001 From: Revisto Date: Fri, 27 Jun 2025 20:14:00 +0330 Subject: [PATCH 03/60] feat(fonts): add Vazirmatn variable font --- assets/fonts/Vazirmatn-Variable.woff2 | Bin 0 -> 111152 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/fonts/Vazirmatn-Variable.woff2 diff --git a/assets/fonts/Vazirmatn-Variable.woff2 b/assets/fonts/Vazirmatn-Variable.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a501289a85595158570b0c2badcb4608b042e748 GIT binary patch literal 111152 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 Q5x9B`DgL-UO8@`>0Dz@xb^rhX literal 0 HcmV?d00001 From 18fdce1a34449e653d84be11cdc9a14df0df0521 Mon Sep 17 00:00:00 2001 From: Revisto Date: Fri, 27 Jun 2025 20:17:14 +0330 Subject: [PATCH 04/60] feat(fonts): register Vazirmatn variable font and apply to fa locale --- assets/css/custom.scss | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/assets/css/custom.scss b/assets/css/custom.scss index 2ac41717b44..b82d6d54f13 100644 --- a/assets/css/custom.scss +++ b/assets/css/custom.scss @@ -251,6 +251,14 @@ blockquote { -webkit-appearance: none; } +@font-face { + font-family: 'Vazirmatn'; + src: url('/assets/fonts/Vazirmatn-Variable.woff2') format('woff2-variations'); + font-weight: 100 900; + font-style: normal; + font-display: swap; +} + *:lang(fa) { .article-body, .lead, @@ -259,4 +267,8 @@ blockquote { h3 { direction: rtl; /* Right to Left */ } + + * { + font-family: 'Vazirmatn', sans-serif; + } } From 4341fd3bf2f02d38d68add101a7113531ab27e51 Mon Sep 17 00:00:00 2001 From: Revisto Date: Fri, 27 Jun 2025 21:10:38 +0330 Subject: [PATCH 05/60] refactor(css): Scope Persian font to specific text elements Replaces the universal selector (*) with a specific list of text-containing elements for applying the Vazirmatn font. --- assets/css/custom.scss | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/assets/css/custom.scss b/assets/css/custom.scss index b82d6d54f13..c37cc9534d7 100644 --- a/assets/css/custom.scss +++ b/assets/css/custom.scss @@ -268,7 +268,18 @@ blockquote { direction: rtl; /* Right to Left */ } - * { + p, + a, + li, + span, + label, + h1, + h2, + h3, + h4, + h5, + h6, + footer { font-family: 'Vazirmatn', sans-serif; } } From 6375d0e2ff783dfebfe7711d3a1afad93285b963 Mon Sep 17 00:00:00 2001 From: Wodsfort Date: Sun, 13 Jul 2025 18:42:17 +0300 Subject: [PATCH 06/60] Add information about Gitlab Signed-off-by: Wodsfort --- _articles/how-to-contribute.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_articles/how-to-contribute.md b/_articles/how-to-contribute.md index 774b3b63710..2965e78cf1b 100644 --- a/_articles/how-to-contribute.md +++ b/_articles/how-to-contribute.md @@ -181,7 +181,7 @@ A project also has documentation. These files are usually listed in the top leve Finally, open source projects use the following tools to organize discussion. Reading through the archives will give you a good picture of how the community thinks and works. * **Issue tracker:** Where people discuss issues related to the project. -* **Pull requests:** Where people discuss and review changes that are in progress, whether it's to improve a contributor's line of code, grammar usage, use of images, etc. Some projects, such as [MDN Web Docs](https://github.com/mdn/content/blob/main/.github/workflows/markdown-lint.yml), use certain GitHub Action flows to automate and quicken their code reviews. +* **Pull/Merge requests:** Where people discuss and review changes that are in progress, whether it's to improve a contributor's line of code, grammar usage, use of images, etc. Some projects, such as [MDN Web Docs](https://github.com/mdn/content/blob/main/.github/workflows/markdown-lint.yml), use certain GitHub Action flows to automate and quicken their code reviews. * **Discussion forums or mailing lists:** Some projects may use these channels for conversational topics (for example, _"How do I..."_ or _"What do you think about..."_ instead of bug reports or feature requests). Others use the issue tracker for all conversations. A good example of this would be [CHAOSS' weekly Newsletter](https://chaoss.community/news/) * **Synchronous chat channel:** Some projects use chat channels (such as Slack or IRC) for casual conversation, collaboration, and quick exchanges. A good example of this would be [EddieHub's Discord community](http://discord.eddiehub.org/). @@ -224,7 +224,7 @@ You can also use one of the following resources to help you discover and contrib * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) * [OpenSauced](https://opensauced.pizza/) - +* [Gilab Explore](https://gitlab.com/explore/projects/starred) ### A checklist before you contribute When you've found a project you'd like to contribute to, do a quick scan to make sure that the project is suitable for accepting contributions. Otherwise, your hard work may never get a response. @@ -307,7 +307,7 @@ Now do the same for the project's pull requests.

From 2c5a732d5cef4d0f05c4ae550af9d0cc1d72b290 Mon Sep 17 00:00:00 2001 From: Wodsfort Date: Sun, 13 Jul 2025 18:46:11 +0300 Subject: [PATCH 07/60] Change after creating mistake Signed-off-by: Wodsfort --- _articles/how-to-contribute.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/how-to-contribute.md b/_articles/how-to-contribute.md index 2965e78cf1b..ba3927103cc 100644 --- a/_articles/how-to-contribute.md +++ b/_articles/how-to-contribute.md @@ -224,7 +224,7 @@ You can also use one of the following resources to help you discover and contrib * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) * [OpenSauced](https://opensauced.pizza/) -* [Gilab Explore](https://gitlab.com/explore/projects/starred) +* [Gitlab Explore](https://gitlab.com/explore/projects/starred) ### A checklist before you contribute When you've found a project you'd like to contribute to, do a quick scan to make sure that the project is suitable for accepting contributions. Otherwise, your hard work may never get a response. From 02af73f25923cfe99c3f08a8666ec0e8ed9c8509 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 04:25:39 +0000 Subject: [PATCH 08/60] chore(deps): bump ruby/setup-ruby in the dependencies group Bumps the dependencies group with 1 update: [ruby/setup-ruby](https://github.com/ruby/setup-ruby). Updates `ruby/setup-ruby` from 1.245.0 to 1.246.0 - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb) - [Commits](https://github.com/ruby/setup-ruby/compare/a4effe49ee8ee5b8b5091268c473a4628afb5651...a4f838919020b587bb8dd4493e8881bb113d3be7) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-version: 1.246.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5333e362c20..b03948a5233 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,7 @@ jobs: - name: Set up Git repository uses: actions/checkout@v4.2.2 - name: Set up Ruby - uses: ruby/setup-ruby@a4effe49ee8ee5b8b5091268c473a4628afb5651 # v1 + uses: ruby/setup-ruby@a4f838919020b587bb8dd4493e8881bb113d3be7 # v1 with: bundler-cache: true - name: Set up Node From c6311cf79bbaeeccfca20225f610f6541950a24b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 05:01:35 +0000 Subject: [PATCH 09/60] chore(deps): bump nokogiri in the dependencies group Bumps the dependencies group with 1 update: [nokogiri](https://github.com/sparklemotion/nokogiri). Updates `nokogiri` from 1.18.8 to 1.18.9 - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.18.8...v1.18.9) --- updated-dependencies: - dependency-name: nokogiri dependency-version: 1.18.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6c0b4c15dd8..715d5eee85a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -260,7 +260,7 @@ GEM logger (1.6.1) mercenary (0.3.6) metrics (0.12.1) - mini_portile2 (2.8.8) + mini_portile2 (2.8.9) minima (2.5.1) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) @@ -268,24 +268,24 @@ GEM minitest (5.25.1) net-http (0.4.1) uri - nokogiri (1.18.8) + nokogiri (1.18.9) mini_portile2 (~> 2.8.2) racc (~> 1.4) - nokogiri (1.18.8-aarch64-linux-gnu) + nokogiri (1.18.9-aarch64-linux-gnu) racc (~> 1.4) - nokogiri (1.18.8-aarch64-linux-musl) + nokogiri (1.18.9-aarch64-linux-musl) racc (~> 1.4) - nokogiri (1.18.8-arm-linux-gnu) + nokogiri (1.18.9-arm-linux-gnu) racc (~> 1.4) - nokogiri (1.18.8-arm-linux-musl) + nokogiri (1.18.9-arm-linux-musl) racc (~> 1.4) - nokogiri (1.18.8-arm64-darwin) + nokogiri (1.18.9-arm64-darwin) racc (~> 1.4) - nokogiri (1.18.8-x86_64-darwin) + nokogiri (1.18.9-x86_64-darwin) racc (~> 1.4) - nokogiri (1.18.8-x86_64-linux-gnu) + nokogiri (1.18.9-x86_64-linux-gnu) racc (~> 1.4) - nokogiri (1.18.8-x86_64-linux-musl) + nokogiri (1.18.9-x86_64-linux-musl) racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3) From 4c6fee2d73bf14d49d941b6cdc8d10a6afa59ce9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Jul 2025 04:18:41 +0000 Subject: [PATCH 10/60] chore(deps): bump ruby/setup-ruby in the dependencies group Bumps the dependencies group with 1 update: [ruby/setup-ruby](https://github.com/ruby/setup-ruby). Updates `ruby/setup-ruby` from 1.246.0 to 1.248.0 - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb) - [Commits](https://github.com/ruby/setup-ruby/compare/a4f838919020b587bb8dd4493e8881bb113d3be7...a9bfc2ecf3dd40734a9418f89a7e9d484c32b990) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-version: 1.248.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b03948a5233..f87e2384655 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,7 @@ jobs: - name: Set up Git repository uses: actions/checkout@v4.2.2 - name: Set up Ruby - uses: ruby/setup-ruby@a4f838919020b587bb8dd4493e8881bb113d3be7 # v1 + uses: ruby/setup-ruby@a9bfc2ecf3dd40734a9418f89a7e9d484c32b990 # v1 with: bundler-cache: true - name: Set up Node From fddc6ef687256a7ff985096e80eb7d322a844028 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 04:36:18 +0000 Subject: [PATCH 11/60] chore(deps): bump ruby/setup-ruby in the dependencies group Bumps the dependencies group with 1 update: [ruby/setup-ruby](https://github.com/ruby/setup-ruby). Updates `ruby/setup-ruby` from 1.248.0 to 1.249.0 - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb) - [Commits](https://github.com/ruby/setup-ruby/compare/a9bfc2ecf3dd40734a9418f89a7e9d484c32b990...65937904bcddfb93f8130882d9afa8597c45f3b5) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-version: 1.249.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f87e2384655..0e952e0bd7d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,7 @@ jobs: - name: Set up Git repository uses: actions/checkout@v4.2.2 - name: Set up Ruby - uses: ruby/setup-ruby@a9bfc2ecf3dd40734a9418f89a7e9d484c32b990 # v1 + uses: ruby/setup-ruby@65937904bcddfb93f8130882d9afa8597c45f3b5 # v1 with: bundler-cache: true - name: Set up Node From 1b145c153378bac0cafd0f712f83a8b13c87b912 Mon Sep 17 00:00:00 2001 From: HAHWUL Date: Thu, 31 Jul 2025 23:58:22 +0900 Subject: [PATCH 12/60] Update ko.nav.about MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 대하여 to 소개 Signed-off-by: HAHWUL --- _data/locales/ko.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_data/locales/ko.yml b/_data/locales/ko.yml index 7192de81c6c..eb0e398562a 100644 --- a/_data/locales/ko.yml +++ b/_data/locales/ko.yml @@ -1,7 +1,7 @@ ko: locale_name: 한국어 nav: - about: 대하여 + about: 소개 contribute: 기여 index: lead: 오픈소스 소프트웨어는 여러분 같은 사람들이 모여 만듭니다. 프로젝트를 시작하고 성장시키는 방법에 대해 배워보세요. From 388d6f7eedaf34b59a3752cdec5983b7250250ba Mon Sep 17 00:00:00 2001 From: jmeridth <35014+jmeridth@users.noreply.github.com> Date: Fri, 1 Aug 2025 04:14:27 -0500 Subject: [PATCH 13/60] fix: ensure sourcesort link is to web archive - add missing opensauced link also while in this file Signed-off-by: jmeridth <35014+jmeridth@users.noreply.github.com> --- _articles/de/how-to-contribute.md | 1 + _articles/el/how-to-contribute.md | 1 + _articles/es/how-to-contribute.md | 1 + _articles/fa/how-to-contribute.md | 3 ++- _articles/fr/how-to-contribute.md | 1 + _articles/hi/how-to-contribute.md | 1 + _articles/hu/how-to-contribute.md | 1 + _articles/id/how-to-contribute.md | 1 + _articles/ja/how-to-contribute.md | 1 + _articles/ko/how-to-contribute.md | 1 + _articles/ms/how-to-contribute.md | 1 + _articles/nl/how-to-contribute.md | 1 + _articles/pl/how-to-contribute.md | 1 + _articles/pt/how-to-contribute.md | 1 + _articles/ro/how-to-contribute.md | 1 + _articles/ru/how-to-contribute.md | 1 + _articles/ta/how-to-contribute.md | 1 + _articles/tr/how-to-contribute.md | 1 + _articles/zh-hans/how-to-contribute.md | 1 + _articles/zh-hant/how-to-contribute.md | 1 + 20 files changed, 21 insertions(+), 1 deletion(-) diff --git a/_articles/de/how-to-contribute.md b/_articles/de/how-to-contribute.md index fc1669644f6..d1036fb1900 100644 --- a/_articles/de/how-to-contribute.md +++ b/_articles/de/how-to-contribute.md @@ -233,6 +233,7 @@ Weiterhin, können Sie auf folgenden Seiten neue Projekte zum Beitragen entdecke * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Eine Checkliste, bevor Sie einen Beitrag leisten diff --git a/_articles/el/how-to-contribute.md b/_articles/el/how-to-contribute.md index 821a118f2a1..c81325f7a05 100644 --- a/_articles/el/how-to-contribute.md +++ b/_articles/el/how-to-contribute.md @@ -213,6 +213,7 @@ related: * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Μια λίστα ελέγχου πριν συνεισφέρετε diff --git a/_articles/es/how-to-contribute.md b/_articles/es/how-to-contribute.md index 25c330fd3f7..45fd5219c11 100644 --- a/_articles/es/how-to-contribute.md +++ b/_articles/es/how-to-contribute.md @@ -209,6 +209,7 @@ Puedes también utilizar algunos de los siguientes recursos para ayudarte * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Una lista de verificación antes de que contribuyas diff --git a/_articles/fa/how-to-contribute.md b/_articles/fa/how-to-contribute.md index 6c94427f2cc..1127588f823 100644 --- a/_articles/fa/how-to-contribute.md +++ b/_articles/fa/how-to-contribute.md @@ -215,7 +215,8 @@ related: * [24 Pull Requests](https://24pullrequests.com/) * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) -* [SourceSort](https://www.sourcesort.com/) +* [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### بررسی چک لیست قبل از مشارکت در پروژه‌ی متن باز diff --git a/_articles/fr/how-to-contribute.md b/_articles/fr/how-to-contribute.md index 91efe84f0f6..83df3ac2c88 100644 --- a/_articles/fr/how-to-contribute.md +++ b/_articles/fr/how-to-contribute.md @@ -209,6 +209,7 @@ Vous pouvez également utiliser l'une des ressources suivantes pour vous aider * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Une checklist avant de contribuer diff --git a/_articles/hi/how-to-contribute.md b/_articles/hi/how-to-contribute.md index 4508ac05fb2..ad6e4fdbbc6 100644 --- a/_articles/hi/how-to-contribute.md +++ b/_articles/hi/how-to-contribute.md @@ -216,6 +216,7 @@ related: * [Contributor-ninja](https://contributor.ninja) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### योगदान देने से पहले एक चेकलिस्ट diff --git a/_articles/hu/how-to-contribute.md b/_articles/hu/how-to-contribute.md index 5ca3d2f5f05..479d5712f29 100644 --- a/_articles/hu/how-to-contribute.md +++ b/_articles/hu/how-to-contribute.md @@ -211,6 +211,7 @@ Az alábbiakban találsz néhány oldalt, amelyek segítenek abban, hogy felfede * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Egy ellenőrző lista, mielőtt részt vennél a projektben diff --git a/_articles/id/how-to-contribute.md b/_articles/id/how-to-contribute.md index 6e25291ca99..fe576995692 100644 --- a/_articles/id/how-to-contribute.md +++ b/_articles/id/how-to-contribute.md @@ -209,6 +209,7 @@ Anda juga bisa menggunakan salah satu dari beberapa sumber daya berikut untuk me * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Daftar sebelum Anda berkontribusi diff --git a/_articles/ja/how-to-contribute.md b/_articles/ja/how-to-contribute.md index 11f99b72484..baf923ea5a2 100644 --- a/_articles/ja/how-to-contribute.md +++ b/_articles/ja/how-to-contribute.md @@ -209,6 +209,7 @@ README を読んで、壊れたリンクやタイポを見つけるかもしれ * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### コントリビュートする前のチェックリスト diff --git a/_articles/ko/how-to-contribute.md b/_articles/ko/how-to-contribute.md index 1a90d6fd69f..d4bea3994f4 100644 --- a/_articles/ko/how-to-contribute.md +++ b/_articles/ko/how-to-contribute.md @@ -211,6 +211,7 @@ README를 스캔하여 깨진 링크나 오타를 찾을 수 있습니다. 또 * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### 기여하기 전 확인할 사항 diff --git a/_articles/ms/how-to-contribute.md b/_articles/ms/how-to-contribute.md index 1c7baa6a543..29025693fee 100644 --- a/_articles/ms/how-to-contribute.md +++ b/_articles/ms/how-to-contribute.md @@ -215,6 +215,7 @@ Anda juga boleh menggunakan salah satu sumber berikut untuk membantu anda menemu * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Senarai semak sebelum anda menyumbang diff --git a/_articles/nl/how-to-contribute.md b/_articles/nl/how-to-contribute.md index 75dd39dc03c..ec0ec98ce9a 100644 --- a/_articles/nl/how-to-contribute.md +++ b/_articles/nl/how-to-contribute.md @@ -223,6 +223,7 @@ U kunt ook een van de volgende bronnen gebruiken om u te helpen bij het ontdekke * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Een checklist voordat u bijdraagt diff --git a/_articles/pl/how-to-contribute.md b/_articles/pl/how-to-contribute.md index 8b88446baa9..efadc381ecf 100644 --- a/_articles/pl/how-to-contribute.md +++ b/_articles/pl/how-to-contribute.md @@ -223,6 +223,7 @@ Możesz także skorzystać z jednego z następujących zasobów, aby pomóc ci o * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Lista kontrolna przed wniesieniem wkładu diff --git a/_articles/pt/how-to-contribute.md b/_articles/pt/how-to-contribute.md index cf301825273..29b1bad4ad8 100644 --- a/_articles/pt/how-to-contribute.md +++ b/_articles/pt/how-to-contribute.md @@ -209,6 +209,7 @@ Você também pode usar um dos seguintes recursos para ajudá-lo a descobrir e c * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Um checklist antes de você contribuir diff --git a/_articles/ro/how-to-contribute.md b/_articles/ro/how-to-contribute.md index 232e425d4ad..05cc87ef994 100644 --- a/_articles/ro/how-to-contribute.md +++ b/_articles/ro/how-to-contribute.md @@ -239,6 +239,7 @@ Poți de asemenea folosi una dintre următoarele resurse pentru a te ajuta să d * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### O listă de verificare înainte de a contribui diff --git a/_articles/ru/how-to-contribute.md b/_articles/ru/how-to-contribute.md index f06ea729330..dbfdb2a69ae 100644 --- a/_articles/ru/how-to-contribute.md +++ b/_articles/ru/how-to-contribute.md @@ -215,6 +215,7 @@ related: * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Чеклист перед тем, как принять участие diff --git a/_articles/ta/how-to-contribute.md b/_articles/ta/how-to-contribute.md index 193a4102653..745102a6bef 100644 --- a/_articles/ta/how-to-contribute.md +++ b/_articles/ta/how-to-contribute.md @@ -210,6 +210,7 @@ related: * [பங்களிப்பாளர்-நிஞ்ஜா](https://contributor.ninja) * [முதல் பங்களிப்புகள்](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### பங்களிக்கும் முன் ஒரு சரிபார்ப்புப் பட்டியல் diff --git a/_articles/tr/how-to-contribute.md b/_articles/tr/how-to-contribute.md index c6fc1f3f498..f7f8f258c3b 100644 --- a/_articles/tr/how-to-contribute.md +++ b/_articles/tr/how-to-contribute.md @@ -215,6 +215,7 @@ Yeni projeleri keşfetmenize ve katkıda bulunmanıza yardımcı olmak için aş * [Up For Grabs](https://up-for-grabs.net/) * [First Contributions](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### Katkıda bulunmadan önce üzerinden geçilebilecek bir kontrol listesi diff --git a/_articles/zh-hans/how-to-contribute.md b/_articles/zh-hans/how-to-contribute.md index cd4cbc1db8c..d34d9e94bc4 100644 --- a/_articles/zh-hans/how-to-contribute.md +++ b/_articles/zh-hans/how-to-contribute.md @@ -211,6 +211,7 @@ redirect_from: /zh-cn/how-to-contribute/ * [像忍者一样贡献](https://contributor.ninja) * [最初的贡献](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### 提交贡献之前的检查列表 diff --git a/_articles/zh-hant/how-to-contribute.md b/_articles/zh-hant/how-to-contribute.md index cf8bf0664f5..ce1ff212d83 100644 --- a/_articles/zh-hant/how-to-contribute.md +++ b/_articles/zh-hant/how-to-contribute.md @@ -210,6 +210,7 @@ redirect_from: /zh-tw/how-to-contribute/ * [貢獻忍者](https://contributor.ninja) * [最初的贡献](https://firstcontributions.github.io) * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) +* [OpenSauced](https://opensauced.pizza/) ### **提交貢獻前應做的檢查清單** From ff7f9f785a1d972a6d7de36b1e1a42850b00fa2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 05:42:44 +0000 Subject: [PATCH 14/60] chore(deps): bump ruby/setup-ruby in the dependencies group Bumps the dependencies group with 1 update: [ruby/setup-ruby](https://github.com/ruby/setup-ruby). Updates `ruby/setup-ruby` from 1.249.0 to 1.254.0 - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb) - [Commits](https://github.com/ruby/setup-ruby/compare/65937904bcddfb93f8130882d9afa8597c45f3b5...2a7b30092b0caf9c046252510f9273b4875f3db9) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-version: 1.254.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0e952e0bd7d..014f7afa4bc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,7 @@ jobs: - name: Set up Git repository uses: actions/checkout@v4.2.2 - name: Set up Ruby - uses: ruby/setup-ruby@65937904bcddfb93f8130882d9afa8597c45f3b5 # v1 + uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 # v1 with: bundler-cache: true - name: Set up Node From 00eca5966188b1defd0fabbb45218f383f5d836a Mon Sep 17 00:00:00 2001 From: vldmrdev <70532790+vldmrdev@users.noreply.github.com> Date: Fri, 8 Aug 2025 19:01:48 +0500 Subject: [PATCH 15/60] add RU translate for security-best-practices-for-your-project --- ...ecurity-best-practices-for-your-project.md | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/_articles/ru/security-best-practices-for-your-project.md b/_articles/ru/security-best-practices-for-your-project.md index cb4921815bc..16ed619c6b4 100644 --- a/_articles/ru/security-best-practices-for-your-project.md +++ b/_articles/ru/security-best-practices-for-your-project.md @@ -1,84 +1,84 @@ --- lang: ru untranslated: true -title: Security Best Practices for your Project -description: Strengthen your project's future by building trust through essential security practices — from MFA and code scanning to safe dependency management and private vulnerability reporting. +title: Лучшие практики безопасности для вашего Проекта +description: Укрепите будущее своего проекта, укрепляя доверие с помощью основных методов обеспечения безопасности — от многофакторной аутентификации и сканирования кода до безопасного управления зависимостями и конфиденциальных отчетов об уязвимостях. class: security-best-practices order: -1 image: /assets/images/cards/security-best-practices.png --- -Bugs and new features aside, a project's longevity hinges not only on its usefulness but also on the trust it earns from its users. Strong security measures are important to keep this trust alive. Here are some important actions you can take to significantly improve your project's security. +Помимо исправления ошибок и добавления новых функций, долгосрочное существование проекта зависит не только от его полезности, но и от доверия, которое он заслуживает у пользователей. Надёжные меры безопасности важны для сохранения этого доверия. Ниже приведены ключевые действия, которые вы можете предпринять, чтобы значительно повысить безопасность вашего проекта. -## Ensure all privileged contributors have enabled Multi-Factor Authentication (MFA) +## Убедитесь, что все привилегированные участники включили двухфакторную аутентификацию (MFA) -### A malicious actor who manages to impersonate a privileged contributor to your project, will cause catastrophic damages. +### Злоумышленник, которому удастся выдать себя за участника с привилегированным доступом, может нанести катастрофический ущерб. -Once they obtain the privileged access, this actor can modify your code to make it perform unwanted actions (e.g. mine cryptocurrency), or can distribute malware to your users' infrastructure, or can access private code repositories to exfiltrate intellectual property and sensitive data, including credentials to other services. +Получив привилегированный доступ, такой злоумышленник может изменить ваш код, чтобы тот выполнял нежелательные действия (например, майнинг криптовалюты), распространить вредоносное ПО в инфраструктуре ваших пользователей или получить доступ к закрытым репозиториям, чтобы похитить интеллектуальную собственность и конфиденциальные данные, включая учётные данные для других сервисов. -MFA provides an additional layer of security against account takeover. Once enabled, you have to log in with your username and password and provide another form of authentication that only you know or have access to. +MFA обеспечивает дополнительный уровень защиты от захвата учётной записи. После включения вы должны входить с логином и паролем, а также предоставлять дополнительную форму аутентификации, к которой у вас есть доступ (например, одноразовый код из приложения). -## Secure your code as part of your development workflow +## Обеспечьте безопасность кода в рамках процесса разработки -### Security vulnerabilities in your code are cheaper to fix when detected early in the process than later, when they are used in production. +### Уязвимости в коде дешевле исправлять на ранних этапах, чем после выхода в продакшн. -Use a Static Application Security Testing (SAST) tool to detect security vulnerabilities in your code. These tools are operating at code level and don't need an executing environment, and therefore can be executed early in the process, and can be seamlessly integrated in your usual development workflow, during the build or during the code review phases. +Используйте инструмент статического анализа безопасности (SAST), чтобы обнаруживать уязвимости в коде. Эти инструменты работают на уровне кода и не требуют исполняемой среды, поэтому их можно запускать на ранних этапах и легко интегрировать в обычный процесс разработки — на этапе сборки или при проверке кода. -It's like having a skilled expert look over your code repository, helping you find common security vulnerabilities that could be hiding in plain sight as you code. +Это как если бы опытный эксперт просматривал ваш репозиторий и помогал находить распространённые уязвимости, которые могут быть незаметны при обычной разработке. -How to choose your SAST tool? -Check the license: Some tools are free for open source projects. For example GitHub CodeQL or SemGrep. -Check the coverage for your language(s) +Как выбрать SAST-инструмент? +- Проверьте лицензию: некоторые инструменты бесплатны для open-source проектов, например GitHub CodeQL или SemGrep. +- Проверьте поддержку ваших языков программирования. -* Select one that easily integrates with the tools you already use, with your existing process. For example, it's better if the alerts are available as part of your existing code review process and tool, rather than going to another tool to see them. -* Beware of False Positives! You don't want the tool to slow you down for no reason! -* Check the features: some tools are very powerful and can do taint tracking (example: GitHub CodeQL), some propose AI-generated fix suggestions, some make it easier to write custom queries (example: SemGrep). +* Выбирайте инструмент, который легко интегрируется с уже используемыми вами средствами и процессами. Например, лучше, если оповещения будут отображаться в рамках вашего текущего процесса проверки кода, а не в отдельном инструменте. +* Остерегайтесь ложных срабатываний! Вы не хотите, чтобы инструмент замедлял вашу работу без причины! +* Проверьте функциональность: некоторые инструменты очень мощные и поддерживают анализ потоков данных (например, GitHub CodeQL), другие предлагают исправления, сгенерированные ИИ, третьи упрощают написание пользовательских запросов (например, SemGrep). -## Don't share your secrets +## Не храните и не публикуйте свои секреты -### Sensitive data, such as API keys, tokens, and passwords, can sometimes accidentally get committed to your repository. +### Конфиденциальные данные, такие как API-ключи, токены и пароли, иногда случайно попадают в репозиторий. -Imagine this scenario: You are the maintainer of a popular open-source project with contributions from developers worldwide. One day, a contributor unknowingly commits to the repository some API keys of a third-party service. Days later, someone finds these keys and uses them to get into the service without permission. The service is compromised, users of your project experience downtime, and your project's reputation takes a hit. As the maintainer, you're now faced with the daunting tasks of revoking compromised secrets, investigating what malicious actions the attacker could have performed with this secret, notifying affected users, and implementing fixes. +Представьте ситуацию: вы — сопровождающий популярного open-source проекта, в который вносят вклад разработчики со всего мира. Однажды участник случайно коммитит в репозиторий API-ключи стороннего сервиса. Через несколько дней кто-то находит эти ключи и использует их для несанкционированного доступа. Сервис оказывается скомпрометирован, пользователи вашего проекта сталкиваются с простоем, а репутация проекта страдает. Как сопровождающий, вы теперь вынуждены отозвать скомпрометированные ключи, выяснить, какие действия злоумышленник мог совершить с этим доступом, уведомить пострадавших пользователей и внедрить исправления. -To prevent such incidents, "secret scanning" solutions exist to help you detect those secrets in your code. Some tools like GitHub Secret Scanning, and Trufflehog by Truffle Security can prevent you from pushing them to remote branches in the first place, and some tools will automatically revoke some secrets for you. +Чтобы предотвратить такие инциденты, существуют решения для сканирования секретов, которые помогают обнаруживать такие данные в вашем коде. Некоторые инструменты, например GitHub Secret Scanning и Trufflehog от Truffle Security, могут предотвратить отправку секретов в удалённые ветки, а некоторые автоматически отзывают обнаруженные ключи. -## Check and update your dependencies +## Проверяйте и обновляйте зависимости -### Dependencies in your project can have vulnerabilities that compromise the security of your project. Manually keeping dependencies up to date can be a time-consuming task. +### Уязвимости в зависимостях вашего проекта могут подорвать его безопасность. Ручное обновление зависимостей — трудоёмкая задача. -Picture this: a project built on the sturdy foundation of a widely-used library. The library later finds a big security problem, but the people who built the application using it don't know about it. Sensitive user data is left exposed when an attacker takes advantage of this weakness, swooping in to grab it. This is not a theoretical case. This is exactly what happened to Equifax in 2017: They failed to update their Apache Struts dependency after the notification that a severe vulnerability was detected. It was exploited, and the infamous Equifax breach affected 144 million users' data. +Представьте: проект построен на прочной основе широко используемой библиотеки. Позже в этой библиотеке обнаруживается серьёзная уязвимость, но разработчики приложения об этом не узнают. Конфиденциальные данные пользователей остаются открытыми, и злоумышленник, воспользовавшись этой уязвимостью, похищает их. Это не теория — именно так произошло с Equifax в 2017 году: они не обновили зависимость Apache Struts после уведомления о критической уязвимости. Она была эксплуатирована, и в результате утечки пострадали данные 144 миллионов пользователей. -To prevent such scenarios, Software Composition Analysis (SCA) tools such as Dependabot and Renovate automatically check your dependencies for known vulnerabilities published in public databases such as the NVD or the GitHub Advisory Database, and then creates pull requests to update them to safe versions. Staying up-to-date with the latest safe dependency versions safeguards your project from potential risks. +Чтобы избежать подобного, инструменты анализа состава ПО (SCA), такие как Dependabot и Renovate, автоматически проверяют зависимости на наличие известных уязвимостей из публичных баз данных (например, NVD или GitHub Advisory Database) и создают pull request'ы для обновления до безопасных версий. Поддержание зависимостей в актуальном состоянии защищает ваш проект от потенциальных рисков. -## Avoid unwanted changes with protected branches +## Защитите основные ветки от нежелательных изменений -### Unrestricted access to your main branches can lead to accidental or malicious changes that may introduce vulnerabilities or disrupt the stability of your project. +### Неограниченный доступ к основным веткам может привести к случайным или злонамеренным изменениям, которые вызовут уязвимости или нарушат стабильность проекта. -A new contributor gets write access to the main branch and accidentally pushes changes that have not been tested. A dire security flaw is then uncovered, courtesy of the latest changes. To prevent such issues, branch protection rules ensure that changes cannot be pushed or merged into important branches without first undergoing reviews and passing specified status checks. You're safer and better off with this extra measure in place, guaranteeing top-notch quality every time. +Новый участник получает права на запись в основную ветку и случайно пушит непроверенные изменения. В результате обнаруживается серьёзная уязвимость, вызванная этими изменениями. Чтобы избежать таких проблем, правила защиты веток гарантируют, что изменения не могут быть влиты в важные ветки без предварительной проверки и прохождения указанных проверок статуса. С этой дополнительной мерой вы будете в большей безопасности, обеспечивая высокое качество кода при каждом изменении. -## Set up an intake mechanism for vulnerability reporting +## Настройте механизм приёма отчётов об уязвимостях -### It's a good practice to make it easy for your users to report bugs, but the big question is: when this bug has a security impact, how can they safely report them to you without putting a target on you for malicious hackers? +### Хорошей практикой является упрощение процесса сообщения об ошибках, но главный вопрос: как пользователи могут безопасно сообщить об уязвимости, не привлекая внимание злоумышленников? -Picture this: A security researcher discovers a vulnerability in your project but finds no clear or secure way to report it. Without a designated process, they might create a public issue or discuss it openly on social media. Even if they are well-intentioned and offer a fix, if they do it with a public pull request, others will see it before it's merged! This public disclosure will expose the vulnerability to malicious actors before you have a chance to address it, potentially leading to a zero-day exploit, attacking your project and its users. +Представьте: исследователь безопасности обнаруживает уязвимость в вашем проекте, но не находит понятного или безопасного способа сообщить о ней. Без чёткого процесса он может создать публичный issue или обсудить проблему в соцсетях. Даже если он действует добросовестно и предлагает исправление, при публичном pull request'е другие увидят уязвимость до её исправления! Такое раскрытие сделает уязвимость доступной для злоумышленников до того, как вы сможете её устранить, что может привести к эксплуатации «в ноль» и атаке на ваш проект и его пользователей. -### Security Policy +### Политика безопасности -To avoid this, publish a security policy. A security policy, defined in a `SECURITY.md` file, details the steps for reporting security concerns, creating a transparent process for coordinated disclosure, and establishing the project team's responsibilities for addressing reported issues. This security policy can be as simple as "Please don't publish details in a public issue or PR, send us a private email at security@example.com", but can also contain other details such as when they should expect to receive an answer from you. Anything that can help the effectiveness and the efficiency of the disclosure process. +Чтобы избежать этого, опубликуйте политику безопасности. Политика безопасности, описанная в файле `SECURITY.md`, детализирует шаги для сообщения о проблемах безопасности, создаёт прозрачный процесс координированного раскрытия и определяет обязанности команды проекта по устранению сообщённых проблем. Политика может быть простой: «Пожалуйста, не публикуйте детали в публичных issue или PR, отправьте нам письмо на security@example.com», но также может содержать дополнительные сведения, например, когда ожидать ответа. Любая информация, которая поможет сделать процесс раскрытия эффективным и быстрым, полезна. -### Private Vulnerability Reporting +### Приватное сообщение об уязвимостях -On some platforms, you can streamline and strengthen your vulnerability management process, from intake to broadcast, with private issues. On GitLab, this can be done with private issues. On GitHub, this is called private vulnerability reporting (PVR). PVR enables maintainers to receive and address vulnerability reports, all within the GitHub platform. GitHub will automatically create a private fork to write the fixes, and a draft security advisory. All of this remains confidential until you decide to disclose the issues and release the fixes. To close the loop, security advisories will be published, and will inform and protect all your users through their SCA tool. +На некоторых платформах можно упростить и усилить процесс управления уязвимостями — от приёма до оповещения — с помощью приватных обращений. В GitLab это реализовано через приватные issue. В GitHub это называется приватным сообщением об уязвимостях (PVR). PVR позволяет сопровождающим получать и обрабатывать отчёты об уязвимостях прямо в GitHub. GitHub автоматически создаёт приватный форк для написания исправлений и черновик security advisory. Всё это остаётся конфиденциальным, пока вы не решите раскрыть проблему и выпустить исправления. В завершение, security advisory публикуются и информируют, а также защищают всех ваших пользователей через их SCA-инструменты. -## Conclusion: A few steps for you, a huge improvement for your users +## Заключение: несколько шагов для вас — огромное улучшение для ваших пользователей -These few steps might seem easy or basic to you, but they go a long way to make your project more secure for its users, because they will provide protection against the most common issues. +Эти шаги могут показаться вам простыми или базовыми, но они значительно повышают безопасность вашего проекта для пользователей, обеспечивая защиту от наиболее распространённых проблем. -## Contributors +## Участники -### Many thanks to all the maintainers who shared their experiences and tips with us for this guide! +### Большое спасибо всем сопровождающим, которые поделились с нами своим опытом и советами для этого руководства! -This guide was written by [@nanzggits](https://github.com/nanzggits) & [@xcorail](https://github.com/xcorail) with contributions from: +Это руководство было написано [@nanzggits](https://github.com/nanzggits) и [@xcorail](https://github.com/xcorail) при участии: [@JLLeitschuh](https://github.com/JLLeitschuh) -[@intrigus-lgtm](https://github.com/intrigus-lgtm) + many others! +[@intrigus-lgtm](https://github.com/intrigus-lgtm) + [многие другие](https://github.com/github/opensource.guide/graphs/contributors)! From de527a7bf945b82b069ccc10b4f1e6555bf8dbf7 Mon Sep 17 00:00:00 2001 From: vldmrdev <70532790+vldmrdev@users.noreply.github.com> Date: Fri, 8 Aug 2025 21:17:11 +0500 Subject: [PATCH 16/60] add RU translate of Maintaining Balance for Open Source Maintainers --- ...ing-balance-for-open-source-maintainers.md | 139 +++++++++--------- 1 file changed, 70 insertions(+), 69 deletions(-) diff --git a/_articles/ru/maintaining-balance-for-open-source-maintainers.md b/_articles/ru/maintaining-balance-for-open-source-maintainers.md index e71d45c2935..5215a35c978 100644 --- a/_articles/ru/maintaining-balance-for-open-source-maintainers.md +++ b/_articles/ru/maintaining-balance-for-open-source-maintainers.md @@ -1,186 +1,186 @@ --- lang: ru untranslated: true -title: Maintaining Balance for Open Source Maintainers -description: Tips for self-care and avoiding burnout as a maintainer. +title: Поддержание баланса для мейнтейнеров в Open Source +description: Советы по заботе о себе и предотвращению выгорания в работе мейнтейнера. class: balance order: 0 image: /assets/images/cards/maintaining-balance-for-open-source-maintainers.png --- -As an open source project grows in popularity, it becomes important to set clear boundaries to help you maintain balance to stay refreshed and productive for the long run. +По мере того как open source-проект становится популярнее, становится важно устанавливать чёткие границы, чтобы сохранять баланс, оставаться бодрым и продуктивным в долгосрочной перспективе. -To gain insights into the experiences of maintainers and their strategies for finding balance, we ran a workshop with 40 members of the Maintainer Community, allowing us to learn from their firsthand experiences with burnout in open source and the practices that have helped them maintain balance in their work. This is where the concept of personal ecology comes into play. +Чтобы понять опыт мейнтейнеров и их стратегии поддержания баланса, мы провели воркшоп с 40 участниками сообщества мейнтейнеров (Maintainer Community), что позволило нам узнать из первых рук об их опыте выгорания в open source и практиках, которые помогли им сохранять равновесие в работе. Именно здесь в игру вступает концепция персональной экологии для поддержания психологически здоровой внутренней среды. -So, what is personal ecology? As described by the Rockwood Leadership Institute, it involves "maintaining balance, pacing, and efficiency to sustain our energy over a lifetime." This framed our conversations, helping maintainers recognize their actions and contributions as parts of a larger ecosystem that evolves over time. Burnout, a syndrome resulting from chronic workplace stress as [defined by the WHO](https://icd.who.int/browse/2025-01/foundation/en#129180281), is not uncommon among maintainers. This often leads to a loss of motivation, an inability to focus, and a lack of empathy for the contributors and community you work with. +Что же такое персональная экология? Как описывает Rockwood Leadership Institute, это «поддержание баланса, темпа и эффективности для сохранения нашей энергии на протяжении всей жизни». Это определило ход наших разговоров и помогло мейнтейнерам осознать свои действия и вклад как части более крупной экосистемы, которая развивается со временем. Выгорание, синдром, вызванный хроническим стрессом на рабочем месте, как [определено ВОЗ]( https://icd.who.int/browse/2025-01/foundation/en#129180281), не редкость среди мейнтейнеров. Это часто приводит к потере мотивации, невозможности сосредоточиться и отсутствию эмпатии к участникам и сообществу, с которым вы работаете. -By embracing the concept of personal ecology, maintainers can proactively avoid burnout, prioritize self-care, and uphold a sense of balance to do their best work. +Принимая концепцию персональной экологии, мейнтейнеры могут заранее предотвращать выгорание, ставить заботу о себе на первое место и поддерживать чувство баланса, чтобы выполнять свою лучшую работу. -## Tips for Self-Care and Avoiding Burnout as a Maintainer: +## Советы по заботе о себе и предотвращению выгорания для мейнтейнеров: -### Identify your motivations for working in open source +### Определите свои мотивы участия в open source -Take time to reflect on what parts of open source maintenance energizes you. Understanding your motivations can help you prioritize the work in a way that keeps you engaged and ready for new challenges. Whether it's the positive feedback from users, the joy of collaborating and socializing with the community, or the satisfaction of diving into the code, recognizing your motivations can help guide your focus. +Уделите время размышлениям о том, какие аспекты сопровождения open source вас вдохновляют. Понимание своих мотивов поможет вам расставлять приоритеты так, чтобы оставаться вовлечёнными и готовыми к новым вызовам. Будь то положительная обратная связь от пользователей, радость совместной работы и общения с сообществом или удовлетворение от погружения в код — осознание своих мотивов поможет направлять ваше внимание. -### Reflect on what causes you to get out of balance and stressed out +### Подумайте, что выбивает вас из равновесия и вызывает стресс -It's important to understand what causes us to get burned out. Here are a few common themes we saw among open source maintainers: +Важно понимать, что приводит нас к выгоранию. Ниже приведены несколько распространённых тем, с которыми сталкиваются мейнтейнеры open source: -* **Lack of positive feedback:** Users are far more likely to reach out when they have a complaint. If everything works great, they tend to stay silent. It can be discouraging to see a growing list of issues without the positive feedback showing how your contributions are making a difference. +* **Отсутствие положительной обратной связи:** Пользователи гораздо чаще обращаются, когда у них есть жалоба. Если всё работает отлично, они, как правило, молчат. Может быть обескураживающе видеть растущий список задач без положительной обратной связи, показывающей, как ваш вклад влияет на результат. -* **Not saying 'no':** It can be easy to take on more responsibilities than you should on an open source project. Whether it's from users, contributors, or other maintainers – we can't always live up to their expectations. +* **Неспособность говорить «нет»:** Легко взять на себя больше ответственности, чем нужно, в open source проекте. Будь то от пользователей, участников или других мейнтейнеров — мы не всегда можем соответствовать их ожиданиям. -* **Working alone:** Being a maintainer can be incredibly lonely. Even if you work with a group of maintainers, the past few years have been difficult for convening distributed teams in-person. +* **Работа в одиночку:** Быть мейнтейнером может быть невероятно одиноко. Даже если вы работаете с группой мейнтейнеров, последние несколько лет были трудными для личных встреч распределённых команд. -* **Not enough time or resources:** This is especially true for volunteer maintainers who have to sacrifice their free time to work on a project. +* **Нехватка времени или ресурсов:** Особенно актуально для волонтёрских мейнтейнеров, которым приходится жертвовать своим свободным временем ради проекта. -* **Conflicting demands:** Open source is full of groups with different motivations, which can be difficult to navigate. If you're paid to do open source, your employer's interests can sometimes be at odds with the community. +* **Конфликтующие требования:** В open source много групп с разными мотивами, что может быть сложно уравновесить. Если вы получаете оплату за работу в open source, интересы вашего работодателя иногда могут противоречить интересам сообщества. -### Watch out for signs of burnout +### Следите за признаками выгорания -Can you keep up your pace for 10 weeks? 10 months? 10 years? +Сможете ли вы сохранять свой темп в течение 10 недель? 10 месяцев? 10 лет? -There are tools like the [Burnout Checklist](https://governingopen.com/resources/signs-of-burnout-checklist.html) from [@shaunagm](https://github.com/shaunagm) that can help you reflect on your current pace and see if there are any adjustments you can make. Some maintainers also use wearable technology to track metrics like sleep quality and heart rate variability (both linked to stress). +Существуют инструменты, такие как [чек-лист выгорания (Burnout Checklist)]( https://governingopen.com/resources/signs-of-burnout-checklist.html ) от [@shaunagm](https://github.com/shaunagm ), которые помогут вам проанализировать текущий темп и понять, какие корректировки можно внести. Некоторые мейнтейнеры также используют носимые устройства для отслеживания таких показателей, как качество сна и изменение сердечного ритма (оба связаны со стрессом). -### What would you need to continue sustaining yourself and your community? +### Что вам нужно, чтобы продолжать поддерживать себя и своё сообщество? -This will look different for each maintainer, and will change depending on your phase of life and other external factors. But here are a few themes we heard: +Для каждого сопровождающего это будет выглядеть по-разному и меняться в зависимости от этапа жизни и других внешних факторов. Ниже приведены несколько тем, которые мы услышали: -* **Lean on the community:** Delegation and finding contributors can alleviate the workload. Having multiple points of contact for a project can help you take a break without worrying. Connect with other maintainers and the wider community–in groups like the [Maintainer Community](http://maintainers.github.com/). This can be a great resource for peer support and learning. +* **Опираетесь на сообщество:** Делегирование задач и поиск новых участников может снизить нагрузку. Наличие нескольких точек контакта для проекта позволяет вам отдохнуть, не беспокоясь. Общайтесь с другими сопровождающими и более широким сообществом — например, в таких группах, как [Maintainer Community](http://maintainers.github.com/). Это может стать отличным ресурсом для поддержки и обучения. - You can also look for ways to engage with the user community, so you can regularly hear feedback and understand the impact of your open source work. + Также ищите способы взаимодействия с пользовательским сообществом, чтобы регулярно получать обратную связь и понимать влияние вашей open source-работы. -* **Explore funding:** Whether you're looking for some pizza money, or trying to go full time open source, there are many resources to help! As a first step, consider turning on [GitHub Sponsors](https://github.com/sponsors) to allow others to sponsor your open source work. If you're thinking about making the jump to full-time, apply for the next round of [GitHub Accelerator](http://accelerator.github.com/). +* **Изучите возможности финансирования:** Хотите ли вы просто немного денег на пиццу или планируете работать в open source полный рабочий день — есть множество ресурсов, которые помогут! В качестве первого шага рассмотрите возможность подключения [GitHub Sponsors](https://github.com/sponsors), чтобы другие могли поддерживать вашу open source-работу. Если вы думаете о переходе на полный рабочий день, подайте заявку на следующий раунд [GitHub Accelerator](http://accelerator.github.com/). -* **Use tools:** Explore tools like [GitHub Copilot](https://github.com/features/copilot/) and [GitHub Actions](https://github.com/features/actions) to automate mundane tasks and free up your time for more meaningful contributions. +* **Используйте инструменты:** Изучите такие инструменты, как [GitHub Copilot](https://github.com/features/copilot/ ) и [GitHub Actions](https://github.com/features/actions ), чтобы автоматизировать рутинные задачи и освободить время для более значимых вкладов. -* **Rest and recharge:** Make time for your hobbies and interests outside of open source. Take weekends off to unwind and rejuvenate–and set your [GitHub status](https://docs.github.com/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile#setting-a-status) to reflect your availability! A good night's sleep can make a big difference in your ability to sustain your efforts long-term. - - If you find certain aspects of your project particularly enjoyable, try to structure your work so you can experience it throughout your day. +* **Отдыхайте и восстанавливайте силы:** Уделяйте время своим увлечениям и интересам вне open source. Отдыхайте по выходным, чтобы расслабиться и восстановиться — и установите свой [статус в GitHub](https://docs.github.com/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile#setting-a-status), чтобы отразить вашу доступность! Хороший сон может сильно повлиять на вашу способность сохранять усилия в долгосрочной перспективе. + Если вы обнаружите, что определённые аспекты проекта приносят вам особое удовольствие, постарайтесь структурировать свою работу так, чтобы испытывать их в течение дня. + -* **Set boundaries:** You can't say yes to every request. This can be as simple as saying, "I can't get to that right now and I do not have plans to in the future," or listing out what you're interested in doing and not doing in the README. For instance, you could say: "I only merge PRs which have clearly listed reasons why they were made," or, "I only review issues on alternate Thursdays from 6 -7 pm.”This sets expectations for others, and gives you something to point to at other times to help de-escalate demands from contributors or users on your time. +* **Устанавливайте границы:** Вы не можете соглашаться на каждый запрос. Это может быть так же просто, как сказать: «Я не могу заняться этим сейчас и не планирую делать это в будущем», или перечислить в README, чем вы хотите заниматься, а чем — нет. Например: «Я объединяю только те PR, в которых чётко указаны причины их создания», или «Я просматриваю задачи по четвергам через один с 18 до 19 часов». Это устанавливает ожидания для других и даёт вам точку опоры, на которую можно сослаться, чтобы снизить давление со стороны участников или пользователей. - Learn to be firm in shutting down toxic behavior and negative interactions. It's okay to not give energy to things you don't care about. + Научитесь твёрдо пресекать токсичное поведение и негативное взаимодействие. Не тратить энергию на то, что вам неинтересно, — это нормально. -Remember, personal ecology is an ongoing practice that will evolve as you progress in your open source journey. By prioritizing self-care and maintaining a sense of balance, you can contribute to the open source community effectively and sustainably, ensuring both your well-being and the success of your projects for the long run. +Помните: персональная экология — это непрерывная практика, которая будет развиваться по мере вашего продвижения в open source-путешествии. Ставя заботу о себе и сохранение баланса во главу угла, вы сможете эффективно и устойчиво вносить вклад в сообщество open source, обеспечивая как своё благополучие, так и успех ваших проектов в долгосрочной перспективе. -## Additional Resources +## Дополнительные ресурсы * [Maintainer Community](http://maintainers.github.com/) -* [The social contract of open source](https://snarky.ca/the-social-contract-of-open-source/), Brett Cannon -* [Uncurled](https://daniel.haxx.se/uncurled/), Daniel Stenberg -* [How to deal with toxic people](https://www.youtube.com/watch?v=7lIpP3GEyXs), Gina Häußge -* [SustainOSS](https://sustainoss.org/) -* [Rockwood Art of Leadership](https://rockwoodleadership.org/art-of-leadership/) -* [Saying No](https://mikemcquaid.com/saying-no/), Mike McQuaid -* [Governing Open](https://governingopen.com/) -* Workshop agenda was remixed from [Mozilla's Movement Building from Home](https://foundation.mozilla.org/en/blog/its-a-wrap-movement-building-from-home/) series +* [Общественный договор open source]( https://snarky.ca/the-social-contract-of-open-source/ ), Бретт Кэннон +* [Расправленный](https://daniel.haxx.se/uncurled/ ), Дэниел Стенберг +* [Как общаться с токсичными людьми](https://www.youtube.com/watch?v=7lIpP3GEyXs), Джина Хойскэ +* [SustainOSS]( https://sustainoss.org/ ) +* [Rockwood Искусство лидерства](https://rockwoodleadership.org/art-of-leadership/ ) +* [Говорите нет](https://mikemcquaid.com/saying-no/ ), Майк МакКвайд +* [Governing Open](https://governingopen.com/ ) +* Повестка воркшопа была адаптирована из серии [Mozilla's Movement Building from Home](https://foundation.mozilla.org/en/blog/its-a-wrap-movement-building-from-home/) -## Contributors +## Участники -Many thanks to all the maintainers who shared their experiences and tips with us for this guide! +Большое спасибо всем участникам, которые поделились с нами своим опытом и советами для этого руководства! -This guide was written by [@abbycabs](https://github.com/abbycabs) with contributions from: +Это руководство написано [@abbycabs](https://github.com/abbycabs ) при участии: [@agnostic-apollo](https://github.com/agnostic-apollo) [@AndreaGriffiths11](https://github.com/AndreaGriffiths11) @@ -218,3 +218,4 @@ This guide was written by [@abbycabs](https://github.com/abbycabs) with contribu [@tudoramariei](https://github.com/tudoramariei) [@UlisesGascon](https://github.com/UlisesGascon) [@waldyrious](https://github.com/waldyrious) + many others! + From c0e429bc0a7102a207a81544cc3fa8437c1e0d21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 11:18:12 +0000 Subject: [PATCH 17/60] chore(deps): bump actions/checkout from 4.2.2 to 5.0.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4.2.2...v5.0.0) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/jekyll-preview.yml | 2 +- .github/workflows/jekyll.yml | 2 +- .github/workflows/tests.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/jekyll-preview.yml b/.github/workflows/jekyll-preview.yml index 000b26c29ea..fc87f0c2329 100644 --- a/.github/workflows/jekyll-preview.yml +++ b/.github/workflows/jekyll-preview.yml @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v5.0.0 with: # For PRs make sure to checkout the PR branch ref: ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml index 4da0a4f51b6..9214931f3e1 100644 --- a/.github/workflows/jekyll.yml +++ b/.github/workflows/jekyll.yml @@ -27,7 +27,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v5.0.0 - name: Setup Pages uses: actions/configure-pages@v5.0.0 - name: Build with Jekyll diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 014f7afa4bc..efc9264d2ac 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Git repository - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v5.0.0 - name: Set up Ruby uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 # v1 with: From c831db618f5a61e5005f33b092b5304d15d3d9bf Mon Sep 17 00:00:00 2001 From: jmeridth <35014+jmeridth@users.noreply.github.com> Date: Tue, 12 Aug 2025 09:05:50 -0500 Subject: [PATCH 18/60] fix: newline between list and header Signed-off-by: jmeridth <35014+jmeridth@users.noreply.github.com> --- _articles/how-to-contribute.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_articles/how-to-contribute.md b/_articles/how-to-contribute.md index ba3927103cc..26686c7a5fb 100644 --- a/_articles/how-to-contribute.md +++ b/_articles/how-to-contribute.md @@ -225,6 +225,7 @@ You can also use one of the following resources to help you discover and contrib * [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/) * [OpenSauced](https://opensauced.pizza/) * [Gitlab Explore](https://gitlab.com/explore/projects/starred) + ### A checklist before you contribute When you've found a project you'd like to contribute to, do a quick scan to make sure that the project is suitable for accepting contributions. Otherwise, your hard work may never get a response. From 148b168b81a47244fc80cc4313335c767a17b4fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 14:14:27 +0000 Subject: [PATCH 19/60] chore(deps): bump ruby/setup-ruby in the dependencies group Bumps the dependencies group with 1 update: [ruby/setup-ruby](https://github.com/ruby/setup-ruby). Updates `ruby/setup-ruby` from 1.254.0 to 1.255.0 - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb) - [Commits](https://github.com/ruby/setup-ruby/compare/2a7b30092b0caf9c046252510f9273b4875f3db9...829114fc20da43a41d27359103ec7a63020954d4) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-version: 1.255.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index efc9264d2ac..8cb06369bc2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,7 @@ jobs: - name: Set up Git repository uses: actions/checkout@v5.0.0 - name: Set up Ruby - uses: ruby/setup-ruby@2a7b30092b0caf9c046252510f9273b4875f3db9 # v1 + uses: ruby/setup-ruby@829114fc20da43a41d27359103ec7a63020954d4 # v1 with: bundler-cache: true - name: Set up Node From 0ea3544592e5401aac117befa6bb015f5f0c6969 Mon Sep 17 00:00:00 2001 From: vldmrdev <70532790+vldmrdev@users.noreply.github.com> Date: Tue, 12 Aug 2025 21:25:14 +0500 Subject: [PATCH 20/60] fix: add RU translation security-best-practices-for-your-project.md --- _articles/ru/security-best-practices-for-your-project.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_articles/ru/security-best-practices-for-your-project.md b/_articles/ru/security-best-practices-for-your-project.md index 16ed619c6b4..b05d003c160 100644 --- a/_articles/ru/security-best-practices-for-your-project.md +++ b/_articles/ru/security-best-practices-for-your-project.md @@ -27,8 +27,8 @@ MFA обеспечивает дополнительный уровень защ Это как если бы опытный эксперт просматривал ваш репозиторий и помогал находить распространённые уязвимости, которые могут быть незаметны при обычной разработке. Как выбрать SAST-инструмент? -- Проверьте лицензию: некоторые инструменты бесплатны для open-source проектов, например GitHub CodeQL или SemGrep. -- Проверьте поддержку ваших языков программирования. +Проверьте лицензию: некоторые инструменты бесплатны для open-source проектов, например GitHub CodeQL или SemGrep. +Проверьте поддержку ваших языков программирования. * Выбирайте инструмент, который легко интегрируется с уже используемыми вами средствами и процессами. Например, лучше, если оповещения будут отображаться в рамках вашего текущего процесса проверки кода, а не в отдельном инструменте. * Остерегайтесь ложных срабатываний! Вы не хотите, чтобы инструмент замедлял вашу работу без причины! @@ -48,7 +48,7 @@ MFA обеспечивает дополнительный уровень защ Представьте: проект построен на прочной основе широко используемой библиотеки. Позже в этой библиотеке обнаруживается серьёзная уязвимость, но разработчики приложения об этом не узнают. Конфиденциальные данные пользователей остаются открытыми, и злоумышленник, воспользовавшись этой уязвимостью, похищает их. Это не теория — именно так произошло с Equifax в 2017 году: они не обновили зависимость Apache Struts после уведомления о критической уязвимости. Она была эксплуатирована, и в результате утечки пострадали данные 144 миллионов пользователей. -Чтобы избежать подобного, инструменты анализа состава ПО (SCA), такие как Dependabot и Renovate, автоматически проверяют зависимости на наличие известных уязвимостей из публичных баз данных (например, NVD или GitHub Advisory Database) и создают pull request'ы для обновления до безопасных версий. Поддержание зависимостей в актуальном состоянии защищает ваш проект от потенциальных рисков. +Чтобы избежать подобного, инструменты анализа состава ПО (SCA), такие, как Dependabot и Renovate, автоматически проверяют зависимости на наличие известных уязвимостей из публичных баз данных (например, NVD или GitHub Advisory Database) и создают pull request'ы для обновления до безопасных версий. Поддержание зависимостей в актуальном состоянии защищает ваш проект от потенциальных рисков. ## Защитите основные ветки от нежелательных изменений From eb57cb19cc491f50c06a13964c0b2a949b81bfb9 Mon Sep 17 00:00:00 2001 From: vldmrdev <70532790+vldmrdev@users.noreply.github.com> Date: Tue, 12 Aug 2025 22:12:45 +0500 Subject: [PATCH 21/60] fix: add RU translation maintaining-balance-for-open-source-maintainer --- _articles/ru/maintaining-balance-for-open-source-maintainers.md | 1 - 1 file changed, 1 deletion(-) diff --git a/_articles/ru/maintaining-balance-for-open-source-maintainers.md b/_articles/ru/maintaining-balance-for-open-source-maintainers.md index 5215a35c978..ecb0d3ee8ff 100644 --- a/_articles/ru/maintaining-balance-for-open-source-maintainers.md +++ b/_articles/ru/maintaining-balance-for-open-source-maintainers.md @@ -218,4 +218,3 @@ image: /assets/images/cards/maintaining-balance-for-open-source-maintainers.png [@tudoramariei](https://github.com/tudoramariei) [@UlisesGascon](https://github.com/UlisesGascon) [@waldyrious](https://github.com/waldyrious) + many others! - From 6554bedd43c6e4dddd1f2c70f9f46f8586186424 Mon Sep 17 00:00:00 2001 From: vldmrdev <70532790+vldmrdev@users.noreply.github.com> Date: Tue, 12 Aug 2025 22:23:52 +0500 Subject: [PATCH 22/60] fix: add RU translation maintaining-balance-for-open-source-maintainer --- ...aintaining-balance-for-open-source-maintainers.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_articles/ru/maintaining-balance-for-open-source-maintainers.md b/_articles/ru/maintaining-balance-for-open-source-maintainers.md index ecb0d3ee8ff..af560e7abc1 100644 --- a/_articles/ru/maintaining-balance-for-open-source-maintainers.md +++ b/_articles/ru/maintaining-balance-for-open-source-maintainers.md @@ -12,7 +12,7 @@ image: /assets/images/cards/maintaining-balance-for-open-source-maintainers.png Чтобы понять опыт мейнтейнеров и их стратегии поддержания баланса, мы провели воркшоп с 40 участниками сообщества мейнтейнеров (Maintainer Community), что позволило нам узнать из первых рук об их опыте выгорания в open source и практиках, которые помогли им сохранять равновесие в работе. Именно здесь в игру вступает концепция персональной экологии для поддержания психологически здоровой внутренней среды. -Что же такое персональная экология? Как описывает Rockwood Leadership Institute, это «поддержание баланса, темпа и эффективности для сохранения нашей энергии на протяжении всей жизни». Это определило ход наших разговоров и помогло мейнтейнерам осознать свои действия и вклад как части более крупной экосистемы, которая развивается со временем. Выгорание, синдром, вызванный хроническим стрессом на рабочем месте, как [определено ВОЗ]( https://icd.who.int/browse/2025-01/foundation/en#129180281), не редкость среди мейнтейнеров. Это часто приводит к потере мотивации, невозможности сосредоточиться и отсутствию эмпатии к участникам и сообществу, с которым вы работаете. +Что же такое персональная экология? Как описывает Rockwood Leadership Institute, это "поддержание баланса, темпа и эффективности для сохранения нашей энергии на протяжении всей жизни". Это определило ход наших разговоров и помогло мейнтейнерам осознать свои действия и вклад как части более крупной экосистемы, которая развивается со временем. Выгорание, синдром, вызванный хроническим стрессом на рабочем месте, как [определено ВОЗ]( https://icd.who.int/browse/2025-01/foundation/en#129180281), не редкость среди мейнтейнеров. Это часто приводит к потере мотивации, невозможности сосредоточиться и отсутствию эмпатии к участникам и сообществу, с которым вы работаете. -* **Неспособность говорить «нет»:** Легко взять на себя больше ответственности, чем нужно, в open source проекте. Будь то от пользователей, участников или других мейнтейнеров — мы не всегда можем соответствовать их ожиданиям. +* **Неспособность говорить "нет":** Легко взять на себя больше ответственности, чем нужно, в open source проекте. Будь то от пользователей, участников или других мейнтейнеров — мы не всегда можем соответствовать их ожиданиям.