strava-offline is a tool to keep a local mirror of Strava activities for further analysis/processing:

Overview

strava-offline

Overview

strava-offline is a tool to keep a local mirror of Strava activities for further analysis/processing:

  • synchronizes metadata about your bikes and activities to an SQLite database

  • downloads all your activities as GPX (and supports not downloading bulk exported activities again)

Example of what you can do with the data:

sample-reports

Installation

Using pipx:

pipx ensurepath
pipx install strava-offline

To keep a local git clone around:

git clone https://github.com/liskin/strava-offline
make -C strava-offline pipx

Alternatively, if you don't need the isolated virtualenv that pipx provides, feel free to just:

pip install strava-offline

Setup and usage

  • Run strava-offline sqlite. The first time you do this, it will open Strava in a browser and ask for permissions. The token is then saved and it proceeds to sync activities metadata (this may take a couple dozen seconds the first time). Next time you run this, it uses the saved token and incrementally syncs latest activities (this takes a few seconds).

  • Now you can use sqlite3 to query the activity database, which is placed at ~/.local/share/strava_offline/strava.sqlite by default. Try for example:

    sqlite3 ~/.local/share/strava_offline/strava.sqlite \
    ​  "SELECT CAST(SUM(distance)/1000 AS INT) || ' km' FROM activity"
    
  • For GPX downloading, you'll need to get the _strava4_session cookie from your web browser session. Open https://strava.com/ in your browser and then follow a guide for your browser to obtain the cookie value:

  • You may also need to obtain your own Client ID and Client Secret from https://www.strava.com/settings/api because the built-in ID/Secret is shared with other users and may hit rate limits (HTTP 429 Too Many Requests). Pass these as --client-id and --client-secret command line arguments or export as STRAVA_CLIENT_ID and STRAVA_CLIENT_SECRET environment variables.

    Alternatively, you may just wait a couple minutes and try again, but the rate limits are rather strict, so in the unlikely event this tool gets popular, serious users will have to get their own API application registered.

    (That settings page also lists Your Access Token but this won't let you download private activities or see names of bikes. Therefore its use is not supported in strava-offline.)

Mirror activities metadata

$ strava-offline sqlite --help
Usage: strava-offline sqlite [OPTIONS]

  Synchronize bikes and activities metadata to local sqlite3 database.
  Unless --full is given, the sync is incremental, i.e. only new activities
  are synchronized and deletions aren't detected.

Options:
  Sync options: 
    --full / --no-full    Perform full sync instead of incremental  [default:
                          False]

  Strava API: 
    --client-id TEXT      Strava OAuth 2 client id  [env var:
                          STRAVA_CLIENT_ID]

    --client-secret TEXT  Strava OAuth 2 client secret  [env var:
                          STRAVA_CLIENT_SECRET]

    --token-file FILE     Strava OAuth 2 token store  [default:
                          /home/user/.config/strava_offline/token.json]

    --http-host TEXT      OAuth 2 HTTP server host  [default: 127.0.0.1]
    --http-port INTEGER   OAuth 2 HTTP server port  [default: 12345]
  Database: 
    --database FILE       Sqlite database file  [default: /home/user/.local/sh
                          are/strava_offline/strava.sqlite]

  -v, --verbose           Logging verbosity (0 = WARNING, 1 = INFO, 2 = DEBUG)
  --config FILE           Read configuration from FILE.  [default:
                          /home/user/.config/strava_offline/config.yaml]

  --help                  Show this message and exit.

Mirror activities as GPX

Important: To avoid overloading Strava servers (and possibly getting noticed), first download all your existing activities using the Bulk Export feature of Strava. Then use --dir-activities-backup at least once to let strava-offline reuse these downloaded files.

$ strava-offline gpx --help
Usage: strava-offline gpx [OPTIONS]

  Download known (previously synced using the "sqlite" command) activities
  in GPX format. It's recommended to only use this incrementally to download
  the latest activities every day or week, and download the bulk of your
  historic activities directly from Strava. Use --dir-activities-backup to
  avoid downloading activities already downloaded in the bulk.

Options:
  GPX storage: 
    --dir-activities DIRECTORY    Directory to store gpx files indexed by
                                  activity id  [default: /home/user/.local/sha
                                  re/strava_offline/activities]

    --dir-activities-backup DIRECTORY
                                  Optional path to activities in Strava backup
                                  (no need to redownload these)

  Strava web: 
    --strava4-session TEXT        '_strava4_session' cookie value  [env var:
                                  STRAVA_COOKIE_STRAVA4_SESSION; required]

  Database: 
    --database FILE               Sqlite database file  [default: /home/user/.
                                  local/share/strava_offline/strava.sqlite]

  -v, --verbose                   Logging verbosity (0 = WARNING, 1 = INFO, 2
                                  = DEBUG)

  --config FILE                   Read configuration from FILE.  [default: /ho
                                  me/user/.config/strava_offline/config.yaml]

  --help                          Show this message and exit.

Reports

$ strava-offline --help | grep report-
  report-bikes         Show all-time report by bike
  report-yearly        Show yearly report by activity type
  report-yearly-bikes  Show yearly report by bike
$ strava-offline report-yearly 2020
Activity type      Distance (km)    Moving time (hour)
---------------  ---------------  --------------------
Ride                        4888                   243
InlineSkate                   76                     4
Walk                          59                    13
Hike                          38                     9
StandUpPaddling                9                     1
Canoeing                       2                     1

Configuration file

Secrets (and other options) can be set permanently in a config file, which is located at ~/.config/strava_offline/config.yaml by default (on Linux; on other platforms see output of --help).

Sample config file can be generated using the --config-sample flag:

$ strava-offline --config-sample
# Perform full sync instead of incremental
full: false

# Strava OAuth 2 client id
strava_client_id: '12345'

# Strava OAuth 2 client secret
strava_client_secret: SECRET

# Strava OAuth 2 token store
strava_token_filename: /home/user/.config/strava_offline/token.json

# OAuth 2 HTTP server host
http_host: 127.0.0.1

# OAuth 2 HTTP server port
http_port: 12345

# Sqlite database file
strava_sqlite_database: /home/user/.local/share/strava_offline/strava.sqlite

# Logging verbosity (0 = WARNING, 1 = INFO, 2 = DEBUG)
verbose: 0

# Directory to store gpx files indexed by activity id
dir_activities: /home/user/.local/share/strava_offline/activities

# Optional path to activities in Strava backup (no need to redownload these)
dir_activities_backup: DIRECTORY

# '_strava4_session' cookie value
strava_cookie_strava4_session: TEXT

Donations ( = €)

If you like this tool and wish to support its development and maintenance, please consider a small donation or recurrent support through GitHub Sponsors.

By donating, you'll also support the development of my other projects. You might like these:

Comments
  • Archive GPX processing fails on activities without GPX data

    Archive GPX processing fails on activities without GPX data

    Hi!

    Thanks for creating and sharing this tool. I have a suspicion it's going to save me from writing a bunch of code on my own.

    I ran into an issue today when trying to process the GPX data from my Strava archives. I have some activities that do not have GPX data. For example, an indoor ride on my trainer or a weight lifting session. Here is one example. When GPX processing tries to download the GPX file for this activity, it understandably cannot find one and throws the below stack trace.

    Oddly, the ride does have has_location_data = 1 in the database, though it lacks a start_latlng and end_latlng (see data below).

    Might excluding activities that do not have a start and end latlng here fix the issue?

    I'd be happy to open a PR if you have a fix in mind.

    Thank you again for sharing this project!

                      id = 461483444
               upload_id = 512650720
                    name = Flywheel
              start_date = 2016-01-02T16:33:25Z
             moving_time = 2692
            elapsed_time = 2692
                distance = 0.0
    total_elevation_gain = 0.0
                 gear_id =
                    type = Ride
                 commute = 0
       has_location_data = 1
                    json = {"resource_state": 2, "athlete": {"id": 4403225, "resource_state": 1}, "name": "Flywheel", "distance": 0.0, "moving_time": 2692, "elapsed_time": 2692, "total_elevation_gain": 0, "type": "Ride", "sport_type": "Ride", "workout_type": null, "id": 461483444, "start_date": "2016-01-02T16:33:25Z", "start_date_local": "2016-01-02T10:33:25Z", "timezone": "(GMT-06:00) America/Chicago", "utc_offset": -21600.0, "location_city": null, "location_state": null, "location_country": "United States", "achievement_count": 0, "kudos_count": 0, "comment_count": 0, "athlete_count": 1, "photo_count": 0, "map": {"id": "a461483444", "summary_polyline": "", "resource_state": 2}, "trainer": true, "commute": false, "manual": false, "private": false, "visibility": "everyone", "flagged": false, "gear_id": null, "start_latlng": [], "end_latlng": [], "average_speed": 0.0, "max_speed": 0.0, "has_heartrate": true, "average_heartrate": 168.0, "max_heartrate": 182.0, "heartrate_opt_out": false, "display_hide_heartrate_option": true, "upload_id": 512650720, "upload_id_str": "512650720", "external_id": "2016-01-02-1033_Spin_Class_WF.tcx", "from_accepted_tag": false, "pr_count": 0, "total_photo_count": 0, "has_kudoed": false}
    

    Here's the full traceback, in case it's helpful.

    (venv) greg@Gregs-MacBook-Air running % strava-offline gpx --dir-activities-backup data/strava_archive_20221122 --database data/strava.sqlite --strava4-session 1ggcfckqdog722tg57u55s6nuq0t22au --config co
    nfig.yaml
    Traceback (most recent call last):
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 124, in get_gpx
        return self._get_gpx("original", activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 117, in _get_gpx
        raise NotGpx(f"expected gpx attachment, got:\n{r.headers}")
    strava_offline.strava.NotGpx: expected gpx attachment, got:
    {'Content-Type': 'application/octet-stream', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Tue, 06 Dec 2022 05:03:51 GMT', 'Via': '1.1 linkerd, 1.1 linkerd, 1.1 ad82d8a3c91257adecf18541576c7e72.cloudfront.net (CloudFront)', 'ETag': 'W/"f74f19e94a7e22a35f9d1cf12f85aadc"', 'Pragma': 'no-cache', 'Server': 'nginx/1.21.3', 'Status': '200 OK', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'X-Request-Id': 'b9c1ec14-68cb-42b4-99c3-0c5c8cd21031', 'Cache-Control': 'no-cache, no-store', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'X-Download-Options': 'noopen', 'Content-Disposition': 'attachment; filename="Flywheel.tcx"; filename*=UTF-8\'\'Flywheel.tcx', 'X-Content-Type-Options': 'nosniff', 'Content-Transfer-Encoding': 'binary', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Cache': 'Miss from cloudfront', 'X-Amz-Cf-Pop': 'SFO53-C1', 'X-Amz-Cf-Id': 'oJVUCZfFHkWfzHF8L6utIPCUhTMX2gLpqACYrq0LyvRA7hyCV4Cxmw=='}
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/Users/greg/Dropbox/running/venv/bin/strava-offline", line 8, in <module>
        sys.exit(cli())
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
        return self.main(*args, **kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1055, in main
        rv = self.invoke(ctx)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke
        return __callback(*args, **kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/config.py", line 36, in wrapper
        return f(config_class(**config_kwargs), **f_kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/cli.py", line 42, in cli_gpx
        gpx.sync(config=config, strava=strava)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 75, in sync
        download_activities(db=db, strava=strava, dir_activities=config.dir_activities)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 59, in download_activities
        download_gpx(strava=strava, activity_id=activity_id, path=dir_activities)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 42, in download_gpx
        gpx = strava.get_gpx(activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 126, in get_gpx
        return self._get_gpx("gpx", activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 117, in _get_gpx
        raise NotGpx(f"expected gpx attachment, got:\n{r.headers}")
    strava_offline.strava.NotGpx: expected gpx attachment, got:
    {'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Tue, 06 Dec 2022 05:03:52 GMT', 'Via': '1.1 linkerd, 1.1 linkerd, 1.1 ad82d8a3c91257adecf18541576c7e72.cloudfront.net (CloudFront)', 'ETag': 'W/"6a683fcb8869821749f7cb424d9bd470"', 'Pragma': 'no-cache', 'Server': 'nginx/1.21.3', 'Status': '200 OK', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'X-Request-Id': 'd353cde2-af0b-4179-8957-4e0b13d70fb8', 'Cache-Control': 'no-cache, no-store', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'X-Frame-Options': 'DENY', 'Content-Encoding': 'gzip', 'X-XSS-Protection': '1; mode=block', 'X-Download-Options': 'noopen', 'X-Content-Type-Options': 'nosniff', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Cache': 'Miss from cloudfront', 'X-Amz-Cf-Pop': 'SFO53-C1', 'X-Amz-Cf-Id': 'W8uwhNS6kMaY0fYQcGzVCjZnPTDK-tfK6KGUjpcpKppD7i_0vfKOqQ=='}
    (venv) greg@Gregs-MacBook-Air running % strava-offline gpx --dir-activities-backup data/strava_archive_20221122 --config config.yaml --verbose
    Traceback (most recent call last):
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 124, in get_gpx
        return self._get_gpx("original", activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 117, in _get_gpx
        raise NotGpx(f"expected gpx attachment, got:\n{r.headers}")
    strava_offline.strava.NotGpx: expected gpx attachment, got:
    {'Content-Type': 'application/octet-stream', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Tue, 06 Dec 2022 05:05:45 GMT', 'Via': '1.1 linkerd, 1.1 linkerd, 1.1 b014854bd0108b7ed0058504b69ccb5a.cloudfront.net (CloudFront)', 'ETag': 'W/"f74f19e94a7e22a35f9d1cf12f85aadc"', 'Pragma': 'no-cache', 'Server': 'nginx/1.21.3', 'Status': '200 OK', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'X-Request-Id': 'd356e70a-cc99-437e-973d-cba5982f2351', 'Cache-Control': 'no-cache, no-store', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'X-Download-Options': 'noopen', 'Content-Disposition': 'attachment; filename="Flywheel.tcx"; filename*=UTF-8\'\'Flywheel.tcx', 'X-Content-Type-Options': 'nosniff', 'Content-Transfer-Encoding': 'binary', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Cache': 'Miss from cloudfront', 'X-Amz-Cf-Pop': 'SFO53-C1', 'X-Amz-Cf-Id': 'IZdK7eu8C797NOyHRGJ1KuweMGfd53e0NjIKYqbh4kCMONL65U-aJQ=='}
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/Users/greg/Dropbox/running/venv/bin/strava-offline", line 8, in <module>
        sys.exit(cli())
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
        return self.main(*args, **kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1055, in main
        rv = self.invoke(ctx)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke
        return __callback(*args, **kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/config.py", line 36, in wrapper
        return f(config_class(**config_kwargs), **f_kwargs)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/cli.py", line 42, in cli_gpx
        gpx.sync(config=config, strava=strava)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 75, in sync
        download_activities(db=db, strava=strava, dir_activities=config.dir_activities)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 59, in download_activities
        download_gpx(strava=strava, activity_id=activity_id, path=dir_activities)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/gpx.py", line 42, in download_gpx
        gpx = strava.get_gpx(activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 126, in get_gpx
        return self._get_gpx("gpx", activity_id)
      File "/Users/greg/Dropbox/running/venv/lib/python3.9/site-packages/strava_offline/strava.py", line 117, in _get_gpx
        raise NotGpx(f"expected gpx attachment, got:\n{r.headers}")
    strava_offline.strava.NotGpx: expected gpx attachment, got:
    {'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Tue, 06 Dec 2022 05:05:46 GMT', 'Via': '1.1 linkerd, 1.1 linkerd, 1.1 b014854bd0108b7ed0058504b69ccb5a.cloudfront.net (CloudFront)', 'ETag': 'W/"d9eb2cd9cb238fb428e1b5f1b599ce10"', 'Pragma': 'no-cache', 'Server': 'nginx/1.21.3', 'Status': '200 OK', 'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'X-Request-Id': 'dada34b2-6eda-4d0b-bd37-07e5447f6339', 'Cache-Control': 'no-cache, no-store', 'Referrer-Policy': 'strict-origin-when-cross-origin', 'X-Frame-Options': 'DENY', 'Content-Encoding': 'gzip', 'X-XSS-Protection': '1; mode=block', 'X-Download-Options': 'noopen', 'X-Content-Type-Options': 'nosniff', 'X-Permitted-Cross-Domain-Policies': 'none', 'X-Cache': 'Miss from cloudfront', 'X-Amz-Cf-Pop': 'SFO53-C1', 'X-Amz-Cf-Id': 'yarXWXK9_6m_Afsa2TC7HiaIGqjLNrI-Zxt3q4V9MJrDH2cKy5aVDQ=='}
    
    opened by gjreda 4
  • Requires setuptools

    Requires setuptools

    Hi! I installed the package using Poetry 1.2.2 and Python 3.10.6 (macOS, homebrew, pyenv). Running strava-offline results in:

    Traceback (most recent call last):
      File "/Users/honza/Library/Caches/pypoetry/virtualenvs/honzajavorekcz-99qNy8GJ-py3.10/bin/strava-offline", line 5, in <module>
        from strava_offline.cli import cli
      File "/Users/honza/Library/Caches/pypoetry/virtualenvs/honzajavorekcz-99qNy8GJ-py3.10/lib/python3.10/site-packages/strava_offline/__init__.py", line 2, in <module>
        from pkg_resources import get_distribution, DistributionNotFound
    ModuleNotFoundError: No module named 'pkg_resources'
    

    I found this solution:

    $ poetry add setuptools
    $ poetry add strava-offline
    

    Then running strava-offline lists its commands. Not sure whether this is expected behavior or a bug.

    opened by honzajavorek 3
  • Bump actions/setup-python from 2 to 4

    Bump actions/setup-python from 2 to 4

    Bumps actions/setup-python from 2 to 4.

    Release notes

    Sourced from actions/setup-python's releases.

    v4.0.0

    What's Changed

    • Support for python-version-file input: #336

    Example of usage:

    - uses: actions/setup-python@v4
      with:
        python-version-file: '.python-version' # Read python version from a file
    - run: python my_script.py
    

    There is no default python version for this setup-python major version, the action requires to specify either python-version input or python-version-file input. If the python-version input is not specified the action will try to read required version from file from python-version-file input.

    • Use pypyX.Y for PyPy python-version input: #349

    Example of usage:

    - uses: actions/setup-python@v4
      with:
        python-version: 'pypy3.9' # pypy-X.Y kept for backward compatibility
    - run: python my_script.py
    
    • RUNNER_TOOL_CACHE environment variable is equal AGENT_TOOLSDIRECTORY: #338

    • Bugfix: create missing pypyX.Y symlinks: #347

    • PKG_CONFIG_PATH environment variable: #400

    • Added python-path output: #405 python-path output contains Python executable path.

    • Updated zeit/ncc to vercel/ncc package: #393

    • Bugfix: fixed output for prerelease version of poetry: #409

    • Made pythonLocation environment variable consistent for Python and PyPy: #418

    • Bugfix for 3.x-dev syntax: #417

    • Other improvements: #318 #396 #384 #387 #388

    Update actions/cache version to 2.0.2

    In scope of this release we updated actions/cache package as the new version contains fixes related to GHES 3.5 (actions/setup-python#382)

    Add "cache-hit" output and fix "python-version" output for PyPy

    This release introduces new output cache-hit (actions/setup-python#373) and fix python-version output for PyPy (actions/setup-python#365)

    The cache-hit output contains boolean value indicating that an exact match was found for the key. It shows that the action uses already existing cache or not. The output is available only if cache is enabled.

    ... (truncated)

    Commits
    • 13ae5bb Merge pull request #517 from rentziass/rentziass/update-actions-core
    • 0c4d7b8 Update @​actions/core to 1.10.0
    • 13a464f Fix typo (#503)
    • b4fe97e upgrade @​actions/cache so it respects SEGMENT_DOWNLOAD_TIMEOUT_MINS (#499)
    • 434aeab Bump @​actions/core from 1.7.0 to 1.9.1 (#495)
    • 98c991d Only use github.token on github.com (#443)
    • 397a35f Merge pull request #492 from al-cheb/al-cheb/update-runner-link
    • 48a0f00 Update runner links
    • 978fd06 Merge pull request #491 from lkfortuna/patch-2
    • 050e616 Update README.md
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump liskin/gh-problem-matcher-wrap from 1 to 2

    Bump liskin/gh-problem-matcher-wrap from 1 to 2

    Bumps liskin/gh-problem-matcher-wrap from 1 to 2.

    Release notes

    Sourced from liskin/gh-problem-matcher-wrap's releases.

    v2.0.0: Bump runner to node16, bump deps

    What's Changed

    New Contributors

    Full Changelog: https://github.com/liskin/gh-problem-matcher-wrap/compare/v1.0.2...v2.0.0

    v1.0.2: Bump @​actions/core

    What's Changed

    Full Changelog: https://github.com/liskin/gh-problem-matcher-wrap/compare/v1.0.1...v1.0.2

    v1.0.1: More problem matchers, improved docs

    No release notes provided.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump actions/checkout from 2 to 3

    Bump actions/checkout from 2 to 3

    Bumps actions/checkout from 2 to 3.

    Release notes

    Sourced from actions/checkout's releases.

    v3.0.0

    • Updated to the node16 runtime by default
      • This requires a minimum Actions Runner version of v2.285.0 to run, which is by default available in GHES 3.4 or later.

    v2.5.0

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.5.0

    v2.4.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.4.2

    v2.4.1

    • Fixed an issue where checkout failed to run in container jobs due to the new git setting safe.directory

    v2.4.0

    • Convert SSH URLs like org-<ORG_ID>@github.com: to https://github.com/ - pr

    v2.3.5

    Update dependencies

    v2.3.4

    v2.3.3

    v2.3.2

    Add Third Party License Information to Dist Files

    v2.3.1

    Fix default branch resolution for .wiki and when using SSH

    v2.3.0

    Fallback to the default branch

    v2.2.0

    Fetch all history for all tags and branches when fetch-depth=0

    v2.1.1

    Changes to support GHES (here and here)

    ... (truncated)

    Changelog

    Sourced from actions/checkout's changelog.

    Changelog

    v3.1.0

    v3.0.2

    v3.0.1

    v3.0.0

    v2.3.1

    v2.3.0

    v2.2.0

    v2.1.1

    • Changes to support GHES (here and here)

    v2.1.0

    v2.0.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump actions/cache from 2 to 3

    Bump actions/cache from 2 to 3

    Bumps actions/cache from 2 to 3.

    Release notes

    Sourced from actions/cache's releases.

    v3.0.0

    • This change adds a minimum runner version(node12 -> node16), which can break users using an out-of-date/fork of the runner. This would be most commonly affecting users on GHES 3.3 or before, as those runners do not support node16 actions and they can use actions from github.com via github connect or manually copying the repo to their GHES instance.

    • Few dependencies and cache action usage examples have also been updated.

    v2.1.7

    Support 10GB cache upload using the latest version 1.0.8 of @actions/cache

    v2.1.6

    • Catch unhandled "bad file descriptor" errors that sometimes occurs when the cache server returns non-successful response (actions/cache#596)

    v2.1.5

    • Fix permissions error seen when extracting caches with GNU tar that were previously created using BSD tar (actions/cache#527)

    v2.1.4

    • Make caching more verbose #650
    • Use GNU tar on macOS if available #701

    v2.1.3

    • Upgrades @actions/core to v1.2.6 for CVE-2020-15228. This action was not using the affected methods.
    • Fix error handling in uploadChunk where 400-level errors were not being detected and handled correctly

    v2.1.2

    • Adds input to limit the chunk upload size, useful for self-hosted runners with slower upload speeds
    • No-op when executing on GHES

    v2.1.1

    • Update @actions/cache package to v1.0.2 which allows cache action to use posix format when taring files.

    v2.1.0

    • Replaces the http-client with the Azure Storage SDK for NodeJS when downloading cache content from Azure. This should help improve download performance and reliability as the SDK downloads files in 4 MB chunks, which can be parallelized and retried independently
    • Display download progress and speed
    Changelog

    Sourced from actions/cache's changelog.

    Releases

    3.0.0

    • Updated minimum runner version support from node 12 -> node 16

    3.0.1

    • Added support for caching from GHES 3.5.
    • Fixed download issue for files > 2GB during restore.

    3.0.2

    • Added support for dynamic cache size cap on GHES.

    3.0.3

    • Fixed avoiding empty cache save when no files are available for caching. (issue)

    3.0.4

    • Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. (issue)

    3.0.5

    • Removed error handling by consuming actions/cache 3.0 toolkit, Now cache server error handling will be done by toolkit. (PR)

    3.0.6

    • Fixed #809 - zstd -d: no such file or directory error
    • Fixed #833 - cache doesn't work with github workspace directory

    3.0.7

    • Fixed #810 - download stuck issue. A new timeout is introduced in the download process to abort the download if it gets stuck and doesn't finish within an hour.

    3.0.8

    • Fix zstd not working for windows on gnu tar in issues #888 and #891.
    • Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 60 minutes.

    3.0.9

    • Enhanced the warning message for cache unavailablity in case of GHES.

    3.0.10

    • Fix a bug with sorting inputs.
    • Update definition for restore-keys in README.md

    3.0.11

    • Update toolkit version to 3.0.5 to include @actions/core@^1.10.0
    • Update @actions/cache to use updated saveState and setOutput functions from @actions/core@^1.10.0
    Commits
    • 9b0c1fc Merge pull request #956 from actions/pdotl-version-bump
    • 18103f6 Fix licensed status error
    • 3e383cd Update RELEASES
    • 43428ea toolkit versioon update and version bump for cache
    • 1c73980 3.0.11
    • a3f5edc Merge pull request #950 from rentziass/rentziass/update-actions-core
    • 831ee69 Update licenses
    • b9c8bfe Update @​actions/core to 1.10.0
    • 0f20846 Merge pull request #946 from actions/Phantsure-patch-2
    • 862fc14 Update README.md
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(1.0.3)
Owner
Tomáš Janoušek
Software (free/open-source), cycling (road, gravel, urban, fixed, uni), beer (🇨🇿). Not necessarily in that order. Current @xmonad maintainer.
Tomáš Janoušek
Caboto, the Kubernetes semantic analysis tool

Caboto Caboto, the Kubernetes semantic analysis toolkit. It contains a lightweight Python library for semantic analysis of plain Kubernetes manifests

Michael Schilonka 8 Nov 26, 2022
Docker Container wallstreetbets-sentiment-analysis

Docker Container wallstreetbets-sentiment-analysis A docker container using restful endpoints exposed on port 5000 "/analyze" to gather sentiment anal

null 145 Nov 22, 2022
A Blazing fast Security Auditing tool for Kubernetes

A Blazing fast Security Auditing tool for kubernetes!! Basic Overview Kubestriker performs numerous in depth checks on kubernetes infra to identify th

Vasant Chinnipilli 934 Jan 4, 2023
A tool to convert AWS EC2 instances back and forth between On-Demand and Spot billing models.

ec2-spot-converter This tool converts existing AWS EC2 instances back and forth between On-Demand and 'persistent' Spot billing models while preservin

jcjorel 152 Dec 29, 2022
Ganeti is a virtual machine cluster management tool built on top of existing virtualization technologies such as Xen or KVM and other open source software.

Ganeti 3.0 =========== For installation instructions, read the INSTALL and the doc/install.rst files. For a brief introduction, read the ganeti(7) m

null 395 Jan 4, 2023
A cron monitoring tool written in Python & Django

Healthchecks Healthchecks is a cron job monitoring service. It listens for HTTP requests and email messages ("pings") from your cron jobs and schedule

Healthchecks 5.8k Jan 2, 2023
IP address management (IPAM) and data center infrastructure management (DCIM) tool.

NetBox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team a

NetBox Community 11.8k Jan 7, 2023
Oncall is a calendar tool designed for scheduling and managing on-call shifts. It can be used as source of dynamic ownership info for paging systems like http://iris.claims.

Oncall See admin docs for information on how to run and manage Oncall. Development setup Prerequisites Debian/Ubuntu - sudo apt-get install libsasl2-d

LinkedIn 928 Dec 22, 2022
A declarative Kubeflow Management Tool inspired by Terraform

?? KRSH is Alpha version, so many bugs can be reported. If you find a bug, please write an Issue and grow the project together! A declarative Kubeflow

Riiid! 128 Oct 18, 2022
Convenient tool to manage multiple VMs at once using libvirt

Convenient tool to manage multiple VMs at once using libvirt Installing To install the tool and its dependencies: pip install -e . Getting completion

Cedric Bosdonnat 13 Nov 11, 2022
CTF infrastructure deployment automation tool.

CTF infrastructure deployment automation tool. Focus on the challenges. Mirrored from

Fake News 1 Apr 12, 2022
A tool to clone efficiently all the repos in an organization

cloner A tool to clone efficiently all the repos in an organization Installation MacOS (not yet tested) python3 -m venv .venv pip3 install virtualenv

Ramon 6 Apr 15, 2022
MagTape is a Policy-as-Code tool for Kubernetes that allows for evaluating Kubernetes resources against a set of defined policies to inform and enforce best practice configurations.

MagTape is a Policy-as-Code tool for Kubernetes that allows for evaluating Kubernetes resources against a set of defined policies to inform and enforce best practice configurations. MagTape includes variable policy enforcement, notifications, and targeted metrics.

T-Mobile 143 Dec 27, 2022
Helperpod - A CLI tool to run a Kubernetes utility pod with pre-installed tools that can be used for debugging/testing purposes inside a Kubernetes cluster

Helperpod is a CLI tool to run a Kubernetes utility pod with pre-installed tools that can be used for debugging/testing purposes inside a Kubernetes cluster.

Atakan Tatlı 2 Feb 5, 2022
This is a tool to develop, build and test PHP extensions in Docker containers.

Develop, Build and Test PHP Extensions This is a tool to develop, build and test PHP extensions in Docker containers. Installation Clone this reposito

Suora GmbH 10 Oct 22, 2022
More than 130 check plugins for Icinga and other Nagios-compatible monitoring applications. Each plugin is a standalone command line tool (written in Python) that provides a specific type of check.

Python-based Monitoring Check Plugins Collection This Enterprise Class Check Plugin Collection offers a package of more than 130 Python-based, Nagios-

Linuxfabrik 119 Dec 27, 2022
Terraform module to ship CloudTrail logs stored in a S3 bucket into a Kinesis stream for further processing and real-time analysis.

AWS infrastructure to ship CloudTrail logs from S3 to Kinesis This repository contains a Terraform module to ship CloudTrail logs stored in a S3 bucke

Nexthink 8 Sep 20, 2022
A python package for your Kali Linux distro that find the fastest mirror and configure your apt to use that mirror

Kali Mirror Finder Using Single Python File A python package for your Kali Linux distro that find the fastest mirror and configure your apt to use tha

MrSingh 6 Dec 12, 2022
Bagas Mirror&Leech Bot is a multipurpose Telegram Bot written in Python for mirroring files on the Internet to our beloved Google Drive. Based on python-aria-mirror-bot

- [ MAYBE UPDATE & ADD MORE MODULE ] Bagas Mirror&Leech Bot Bagas Mirror&Leech Bot is a multipurpose Telegram Bot written in Python for mirroring file

null 4 Nov 23, 2021