From 7d7f43d7346b6fa4534c62f304e89f8814964468 Mon Sep 17 00:00:00 2001 From: sthope Date: Mon, 13 Sep 2021 19:16:12 +0200 Subject: [PATCH] initial commit --- .drone.yml | 87 +++++++++++++++++++++++++++ .releaserc | 122 ++++++++++++++++++++++++++++++++++++++ CHANGELOG.md | 30 ++++++++++ Dockerfile | 10 ++++ LICENSE | 9 +++ README-pt-PT.md | 51 ++++++++++++++++ README.md | 62 +++++++++++++++++++ randomport/randomport1.py | 16 +++++ test.png | Bin 0 -> 17267 bytes 9 files changed, 387 insertions(+) create mode 100644 .drone.yml create mode 100644 .releaserc create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README-pt-PT.md create mode 100644 README.md create mode 100644 randomport/randomport1.py create mode 100644 test.png diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..d7a0b23 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,87 @@ +kind: pipeline +name: "test python and publish to dockerhub" +type: docker + +clone: + disable: true + +steps: +- name: skip_tls_clone + image: plugins/git + settings: + depth: 10 + skip_verify: true + +- name: semantic-release + purge: true + image: cphapt/cpha-semantic-release:latest + environment: + GITEA_TOKEN: + from_secret: gitea_token + commands: + - semantic-release + +- name: setup-virtualenv + image: python:3.7-alpine + commands: + - pip install virtualenv + - virtualenv /tmp/shared/.venv + - source /tmp/shared/.venv/bin/activate + volumes: + - name: shared + path: /tmp/shared + +- name: testing + image: python:3.7-alpine + commands: + - source /tmp/shared/.venv/bin/activate + - python randomport/randomport1.py + volumes: + - name: shared + path: /tmp/shared + +- name: build-and-publish + image: plugins/docker + settings: + purge: false + debug: false + auto_tag: true + dockerfile: Dockerfile + repo: sthopeless/randomport + username: + from_secret: docker_username + password: + from_secret: docker_password + +- name: discord + image: appleboy/drone-discord + environment: + DISCORD_WEBHOOK_ID: + from_secret: discord_webhook_id + DISCORD_WEBHOOK_TOKEN: + from_secret: discord_webhook_token + settings: + message: > + {{#success build.status}} + ✅ Build #{{build.number}} of `{{repo.name}}` succeeded. + + 📝 Commit by {{commit.author}} on `{{commit.branch}}`: + ``` + {{commit.message}} + ``` + 🌐 <{{ build.link }}> + {{else}} + ❌ Build #{{build.number}} of `{{repo.name}}` failed. + 📝 Commit by {{commit.author}} on `{{commit.branch}}`: + ``` + {{commit.message}} + ``` + 🌐 <{{ build.link }}> + {{/success}} + when: + status: + - failure + +volumes: +- name: shared + temp: {} \ No newline at end of file diff --git a/.releaserc b/.releaserc new file mode 100644 index 0000000..1d7e1f8 --- /dev/null +++ b/.releaserc @@ -0,0 +1,122 @@ +branches: ['master','main'] +ci: true +debug: true +dryRun: false +tagFormat: '${version}' + +# Global plugin options (will be passed to all plugins) +preset: 'angular' # angular, conventionalcommits +repositoryUrl: 'https://git.sthope.dev/sthope/DockerContainer-RandomPort.git' # your repository url +giteaUrl: 'https://git.sthope.dev' + +# Responsible for verifying conditions necessary to proceed with the release: +# configuration is correct, authentication token are valid, etc... +verifyConditions: + - '@semantic-release/changelog' + - '@semantic-release/git' + - '@saithodev/semantic-release-gitea' + +# Responsible for determining the type of the next release (major, minor or patch). +# If multiple plugins with a analyzeCommits step are defined, the release type will be +# the highest one among plugins output. +# Look details at: https://github.com/semantic-release/commit-analyzer#configuration +analyzeCommits: + - path: '@semantic-release/commit-analyzer' + releaseRules: + - breaking: true + release: major + - type: build # Changes that affect the build system or external dependencies + release: patch + - type: chore # Other changes that don't modify src or test files + release: false + - type: ci # Changes to our CI configuration files and scripts + release: false + - type: docs # Documentation only changes + release: false + - type: feat # A new feature + release: minor + - type: fix # A bug fix + release: patch + - type: perf # A code change that improves performance + release: patch + - type: refactor # A code change that neither fixes a bug nor adds a feature + release: false + - type: revert # Reverts a previous commit + release: patch + - type: style # Changes that do not affect the meaning of the code + release: false + - type: test # Adding missing tests or correcting existing tests + release: false + +# Responsible for generating the content of the release note. +# If multiple plugins with a generateNotes step are defined, +# the release notes will be the result of the concatenation of each plugin output. +generateNotes: + - path: '@semantic-release/release-notes-generator' + writerOpts: + groupBy: 'type' + commitGroupsSort: 'title' + commitsSort: 'header' + linkCompare: true + linkReferences: true + presetConfig: + types: # looks like it only works with 'conventionalcommits' preset + - type: 'build' + section: '🦊 CI/CD' + hidden: false + - type: 'chore' + section: 'Other' + hidden: false + - type: 'ci' + section: '🦊 CI/CD' + hidden: false + - type: 'docs' + section: '📔 Docs' + hidden: false + - type: 'example' + section: '📝 Examples' + hidden: false + - type: 'feat' + section: '🚀 Features' + hidden: false + - type: 'fix' + section: '🛠 Fixes' + hidden: false + - type: 'perf' + section: '⏩ Performance' + - type: 'refactor' + section: ':scissors: Refactor' + hidden: false + - type: 'revert' + section: '👀 Reverts' + - type: 'style' + section: '💈 Style' + - type: 'test' + section: '🧪 Tests' + hidden: false + +# Responsible for preparing the release, for example creating or updating files +# such as package.json, CHANGELOG.md, documentation or compiled assets +# and pushing a commit. +prepare: +# - path: '@semantic-release/exec' +# # Execute shell command to set package version +# cmd: './deployment/version-plaintext-set.sh ${nextRelease.version}' +# - path: '@semantic-release/exec' +# cmd: './deployment/version-oas-set.sh ${nextRelease.version} openapi.yaml' + - path: '@semantic-release/exec' + verifyReleaseCmd: "echo ${nextRelease.version} > VERSION.md" + - path: '@semantic-release/changelog' + # Create or update the changelog file in the local project repository + # - path: '@semantic-release/git' + # Push a release commit and tag, including configurable files + message: 'RELEASE: ${nextRelease.version}' + assets: ['CHANGELOG.md'] + +# Responsible for publishing the release. +publish: + - path: '@saithodev/semantic-release-gitea' + +success: false + +fail: false \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0b7268c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,30 @@ +## [0.2.4](https://git.sthope.dev/sthope/DockerContainer-RandomPort/compare/0.2.3...0.2.4) (2021-09-13) + + +### Bug Fixes + +* **):(:** final release ([8daa167](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/8daa1677a874f0b3b5d2549e6d218c0bbcbf7217)) +* **):(:** final release ([0cb2b23](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/0cb2b230623b4656d04b98b8c608a6eb095b27c0)) +* **):(:** final release ([1a38966](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/1a389660f0fbb70b6de15529f4db2df1cf84ce59)) +* **):(:** final release ([97390ab](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/97390ab631756171ea3577179f11df6a9219b9dd)) +* **):(:** final release ([40aad2e](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/40aad2e7b28b2a3acbca82e562958034c168d7d3)) +* **):(:** final release ([95103cd](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/95103cd2e8d1cafe991a6c468f14fa0644a339f5)) + + +### Performance Improvements + +* final release ([55e467d](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/55e467de52008cf35cc87aea6a3bdb515c59563e)) +* final release ([0dbc2b5](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/0dbc2b514dbece49aa84bf2c37f36d537ad6badf)) +* final release ([c30b142](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/c30b1424bbe13e0ba4e81c6dc55dcebffb1c58b2)) +* final release ([85d408c](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/85d408c243e339a492797e03916ece8ab64eacf5)) +* final test fucking this ([f9f0360](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/f9f036068ca728dae9ab94b14282675f8bbd1490)) +* test ([0f2d604](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/0f2d6042041d85e4ed55ee2f814915ce9ebef4e5)) +* test ([5ecf4d3](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/5ecf4d3e4a9791c05dd85a69910eb124b76fcbb6)) +* test ([dda71a4](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/dda71a42da04db3b5017df7ca36873bf71e0881f)) + +## [0.2.1](https://git.sthope.dev/sthope/DockerContainer-RandomPort/compare/v0.2.0...v0.2.1) (2021-09-13) + + +### Performance Improvements + +* test ([dda71a4](https://git.sthope.dev/sthope/DockerContainer-RandomPort/commit/dda71a42da04db3b5017df7ca36873bf71e0881f)) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..824ec53 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.7-alpine + +LABEL org.opencontainers.image.source="https://git.sthope.dev/sthope/DockerContainer-RandomPort" +LABEL Maintainer="Sthope" +LABEL Description="Random Port Generator between 10000 and 65535" +LABEL version="1.0.0" + +ADD randomport/ /randomport/ + +CMD ["python", "/randomport/randomport1.py"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7d0dcd4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2021 Sthope HopelessAutomations@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README-pt-PT.md b/README-pt-PT.md new file mode 100644 index 0000000..758346a --- /dev/null +++ b/README-pt-PT.md @@ -0,0 +1,51 @@ +[English](./README.md) +[](https://www.sthope.dev/) + +# Project_Name · [![Build Status](https://img.shields.io/drone/build/sthope/gitea_templates?server=https%3A%2F%2Fdrone.sthope.dev&style=plastic)](../../..) [![MIT license](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=plastic&logo=appveyor)](LICENSE) + +> 🔥[Sthope](https://www.sthope.dev) + +Uma breve descrição do teu projeto e para que é utilizado. + +## :construction_worker: Instalação / Introdução + +Uma introdução rápida da configuração mínima necessária. + +```shell +commands here +``` + +Aqui deves dizer o que realmente acontece quando executas o código acima. + +## :trophy: Versioning + +Este projecto usa [semantic releases](https://github.com/cenk1cenk2/drone-semantic-release) para controle de versões. For the versions available, see the [Tags](../../../tags). + +## 📥 Configuração + +example_how_it_works + +## :bug: Problemas + +Fique a vontade **para criar uma nova issue** com o respectivo título e descrição na página [issues](../../../issues) do Repositório. +Se já encontrou a solução para o problema, [**Eu adoraria fazer o review do pull request**](../../../pulls)! + +## :tada: Contribuir + +Em primeiro lugar, obrigado por estar interessado em ajudar, o seu tempo é sempre apreciado! :100: + +Aqui estão algumas dicas: + +* Verifique a [página de problemas](../../../issues) para problemas já abertos (ou talvez até mesmo fechados) que já podem resolver a sua questão / bug / feature request. +* Feature requests são bem-vindos! Forneça alguns detalhes sobre porque isso seria útil para si e para outras pessoas e, se possível, até mesmo alguns print screens! + +Verifique a página [contributing](./CONTRIBUTING.md) para ver os melhores locais para registrar questões, iniciar discussões e começar a contribuir. + +## :closed_book: Licença + +Lançado em 2021 :closed_book: License + +Made with :heart: by [Sthope](https://www.sthope.dev) +Para mais informações, consulte a [LICENÇA](LICENSE) file. + +Give a ⭐️ if this project helped you! diff --git a/README.md b/README.md new file mode 100644 index 0000000..2d35d07 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +[Português](./README-pt-PT.md) + +[](https://www.sthope.dev/) + +# Random Port Generator (x10) · [![Build Status](https://img.shields.io/drone/build/sthope/DockerContainer-RandomPort?server=https%3A%2F%2Fdrone.sthope.dev&style=plastic)](../../..) [![MIT license](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=plastic&logo=appveyor)](LICENSE) + +> 🔥[Sthope](https://www.sthope.dev) + +Docker container used to generate 10 random ports. Mostly to use on my website as templates. + +## :construction_worker: Installing / Getting started + +Script used to generate ports for my docker (and others..) templates + +```shell +docker run -it --rm ghcr.io/sthopeless/randomport:latest +``` +or with sudo +```shell +sudo docker run -it --rm ghcr.io/sthopeless/randomport:latest +``` + +![test](test.png) + +## :trophy: Versioning + +This project uses [semantic releases](https://github.com/cenk1cenk2/drone-semantic-release) for versioning. For the versions available, see the [Tags](../../../tags). + +## 📥 Configuration + +Simply run one of the above commands, it will print out 10 random ports + +## :bug: Issues + +Feel free to **file a new issue** with a respective title and description on the the [repository](../../../issues). If you already found a solution to your problem, [**i would love to review your pull request**](../../../pulls)! + +## :tada: Contributing + +First of all, thank you for being interested in helping out, your time is always appreciated in every way. :100: + +Here's some tips: + +* Check the [issues page](../../../issues) for already opened issues (or maybe even closed ones) that might already address your question/bug/feature request. +* Feature requests are welcomed! Provide some details on why it would be helpful for you and others, explain how you're using bull-board and if possible even some screenshots if you are willing to mock something! + +Check out the [contributing](./CONTRIBUTING.md) page to see the best places to file issues, start discussions and begin contributing. + +## Support + +Reach out to the maintainer at one of the following places: + +* [Discord chat](1256) +* The email which is located [in Github profile](12345) + +## :closed_book: License + +Released in 2021 :closed_book: License + +Made with :heart: by [Sthope](https://www.sthope.dev) +For more information, please refer to the [LICENSE](LICENSE) file. + +Give a ⭐️ if this project helped you! \ No newline at end of file diff --git a/randomport/randomport1.py b/randomport/randomport1.py new file mode 100644 index 0000000..317544f --- /dev/null +++ b/randomport/randomport1.py @@ -0,0 +1,16 @@ +from random import * + +def randomPort(): + x = randint(10000, 65535) + print(x) + +randomPort() +randomPort() +randomPort() +randomPort() +randomPort() +randomPort() +randomPort() +randomPort() +randomPort() +randomPort() diff --git a/test.png b/test.png new file mode 100644 index 0000000000000000000000000000000000000000..36ac624f7dda35fd484f7e82779d6c1de4d43225 GIT binary patch literal 17267 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 CYPP8W literal 0 HcmV?d00001